使用 datetime2 包,我们如何单独检索 yyyy、yy、mm、dd、mmm、ddd、hhmm、hhmmss 等?

使用 datetime2 包,我们如何单独检索 yyyy、yy、mm、dd、mmm、ddd、hhmm、hhmmss 等?

假设现在是 2019-07-21-082935。

如果我使用 datetime2 包,我该使用哪些命令分别检索“2019”、“19”、“07”、“7”、“JUL”、“July”、“21”、“SUN”、“Sun”、“Sunday”、“082935”、“0829”、“08”、“29”、“35”?

(我原以为会有一些简单的命令如 \yyyy、\mm、\MMM、\Mm 等,但似乎没有。)

如果上述方法不可行,还有其他我可以使用的包吗?

答案1

datetime2似乎没有提供命令来解析日期/时间格式字符串并输出特定组件。如果您只想访问单个组件,您可以轻松定义一个宏,将参数与给定格式进行比较并输出相应格式的相应组件。

下面的代码定义了一个宏\formatdatetime{<saved date name>}{<component format>},它根据传递的格式格式化保存日期的特定部分。由于您还不清楚应该将哪个字符串映射到哪种格式,因此这段代码应该更多地被视为想法的草图,而不是完整的实现。

\documentclass{article}
\usepackage[english]{babel}
\usepackage[calc]{datetime2}

\newcommand\formatdatetime[2]{%
    \begingroup
    \renewcommand*\DTMdisplaydate[4]{}%
    \renewcommand*\DTMdisplaytime[3]{}%
    \renewcommand*\DTMdisplayzone[2]{}%
    %
    \ifmatches{#2}{yyyy}{\renewcommand*\DTMdisplaydate[4]{\number##1}}%
    \ifmatches{#2}{yy}  {\renewcommand*\DTMdisplaydate[4]{\DTMtwodigits{##1}}}%
    \ifmatches{#2}{m}   {\renewcommand*\DTMdisplaydate[4]{##2}}%
    \ifmatches{#2}{mm}  {\renewcommand*\DTMdisplaydate[4]{\DTMtwodigits{##2}}}%
    \ifmatches{#2}{mmm} {\renewcommand*\DTMdisplaydate[4]{\DTMshortmonthname{##2}}}%
    \ifmatches{#2}{mmmm}{\renewcommand*\DTMdisplaydate[4]{\DTMmonthname{##2}}}%
    \ifmatches{#2}{d}   {\renewcommand*\DTMdisplaydate[4]{##3}}%
    \ifmatches{#2}{dd}  {\renewcommand*\DTMdisplaydate[4]{\DTMtwodigits{##3}}}%
    \ifmatches{#2}{ddd} {\renewcommand*\DTMdisplaydate[4]{\DTMshortweekdayname{##4}}}%
    \ifmatches{#2}{dddd}{\renewcommand*\DTMdisplaydate[4]{\DTMweekdayname{##4}}}%
    %
    \DTMuse{#1}%
    \endgroup
}
\newcommand\ifmatches[3]{%
    \def\tempa{#1}%
    \def\tempb{#2}%
    \ifx\tempa\tempb #3\fi
}

\newcommand\testdatetime[2]{%
    \makebox[4em][l]{#2}: \formatdatetime{#1}{#2}\par
}

\begin{document}
\DTMsavenow{mydate}
\makebox[4em][l]{now}: \DTMuse{mydate}\par
\testdatetime{mydate}{yyyy}
\testdatetime{mydate}{yy}
\testdatetime{mydate}{m}
\testdatetime{mydate}{mm}
\testdatetime{mydate}{mmm}
\testdatetime{mydate}{mmmm}
\testdatetime{mydate}{d}
\testdatetime{mydate}{dd}
\testdatetime{mydate}{ddd}
\testdatetime{mydate}{dddd}
\end{document}

输出

在此处输入图片描述

相关内容