获取日期元素作为字符串

获取日期元素作为字符串

我想知道是否有办法获得日期元素(年、月、日、时、分、秒)以创建自动递增的幸运版本号。例如,如果现在是 2018 年 3 月 19 日 15:30,我想生成一个数字,如:201803191530,格式为 YYYYMMDDHHmm。我希望能够以任何方式排列元素。理想的是某种命令\year \month \day \hour \minute \second,例如,这样我就可以随心所欲地使用它们。

答案1

无需任何包的可扩展时间戳定义:

\documentclass{article}

\makeatletter
\edef\timestamp{%
  \the\year
  \two@digits\month
  \two@digits\day
  \two@digits{\numexpr(\time*2 - 59)/120\relax}%
  \two@digits{\numexpr\time - 60*\numexpr(\time*2 - 59)/120\relax\relax}%
}
\makeatother

\typeout{Time stamp: \timestamp}

\begin{document}
  Time stamp: \timestamp
\end{document}

结果

评论:

  • \time获取当天的会议纪要。
  • e-TeX\numexpr允许可扩展计算。但是,它会四舍五入。复杂的公式会绕过它。
  • \two@digits来自 LaTeX 内核,用于正整数。如果数字小于 10,它会在前面添加一个零。

答案2

如果使用pdflatex,则可以使用\pdfcreationdate它来记录 PDF 文件打开输出时的时间戳,该时间戳是以下形式的字符串

D:20170421011556+02’00’

最后七个字符代表与 UTC 的差异。因此,这只是解析字符串的问题。我为您的时间戳添加了一个可能的定义,随意重新排序项目。

\documentclass{article}

\makeatletter
\begingroup
\def\set@time@data#1:#2\@nil{\set@time@data@a#2}
\def\set@time@data@a#1#2#3#4{%
  \gdef\Year{#1#2#3#4}%
  \set@time@data@b
}
\def\set@time@data@b#1#2#3#4{%
  \gdef\Month{#1#2}%
  \gdef\Day{#3#4}%
  \set@time@data@c
}
\def\set@time@data@c#1#2#3#4#5#6{%
  \gdef\Hour{#1#2}%
  \gdef\Min{#3#4}%
  \gdef\Sec{#5#6}%
  \set@time@data@d
}
\def\set@time@data@d#1#2#3#4#5#6#7{}
% start up the business
\expandafter\set@time@data\pdfcreationdate\@nil
\endgroup
\edef\TimeStamp{\Year-\Month-\Day\space\Hour:\Min:\Sec}
\makeatother

\begin{document}

Time stamp: \TimeStamp

\medskip

\begin{tabular}{@{}ll}
Year & \Year \\
Month & \Month \\
Day & \Day \\
Hour & \Hour \\
Min & \Min \\
Sec & \Sec \\
\end{tabular}

\end{document}

在此处输入图片描述

类似,但语法更清晰(这里我只定义宏\TimeStamp);只需在各个范围内移动即可。

\documentclass{article}
\usepackage{xparse}

\ExplSyntaxOn
\cs_set:Npx \TimeStamp
 {
  \str_range:Nnn \pdfcreationdate { 3 } { 6 } % year
  -
  \str_range:Nnn \pdfcreationdate { 7 } { 8 } % month
  -
  \str_range:Nnn \pdfcreationdate { 9 } { 10 } % day
  \space
  \str_range:Nnn \pdfcreationdate { 11 } { 12 } % hour
  :
  \str_range:Nnn \pdfcreationdate { 13 } { 14 } % minutes
  :
  \str_range:Nnn \pdfcreationdate { 15 } { 16 } % seconds
 }
\ExplSyntaxOff

\begin{document}

Time stamp: \TimeStamp

\end{document}

在此处输入图片描述

相关内容