写入日期、时间和时区

写入日期、时间和时区

背景

希望在 PDF 中包含当前日期、时间和时区。

问题

datetime软件包没有提供当前时区的宏。

问题

如何在 LaTeX 中编写宏来创建如下日期:

Sun Jan 09 20:17:18 EST 2011

在职的

迄今:

\usepackage{datetime}
\shortdayofweekname{\day}{\month}{\year}
\shortmonthname{} \twodigit{\day} \hhmmsstime{}
EST \number\year

我记不清楚时区(EST)。

有关的

谢谢你!

答案1

您可以使用 pdfTeX 原语获取与 GMT 的偏移量\pdfcreationdate:(毫无疑问 LuaTeX 有类似的东西)

\documentclass{article}
\begin{document}
\def\grabtimezone #1#2#3#4#5#6#7#8#9{\grabtimezoneB}
\def\grabtimezoneB #1#2#3#4#5#6#7{\grabtimezoneC}
\def\grabtimezoneC #1#2'#3'{sign: #1 / hr: #2 / min: #3}
\expandafter \grabtimezone\pdfcreationdate
\end{document}

如果您需要将其转换为时区字符串,则需要定义一个时区字典以匹配时间偏移。由于我认为这是多个时区的多对一映射,我不确定这将如何工作。

一旦您弄清楚了您的应用程序到底需要什么,我建议写信给作者,datetime让其在该包中添加这样的功能。

更新要获得用于获取时区字符串输出的粗略查找表,您可以尝试以下操作:

\makeatletter
\@namedef{timezone+0930}{CST}
\@namedef{timezone+1000}{EST}
\@namedef{timezone+1030}{CST'}% daylight savings
\def\grabtimezone #1#2#3#4#5#6#7#8#9{\grabtimezoneB}
\def\grabtimezoneB #1#2#3#4#5#6#7{\grabtimezoneC}
\def\grabtimezoneC #1#2'#3'{%
  \@ifundefined{timezone#1#2#3}
    {No timezone for `#1#2#3'}
    {\@nameuse{timezone#1#2#3}}%
}
\def\timezone{\expandafter\grabtimezone\pdfcreationdate}
\makeatother

\timezone

答案2

现在filemod包可以返回任何文件的文件修改日期(可以通过 TeX 找到)。它基于宏\pdffilemoddate。它适用于 pdf(La)TeX 和 Lua(La)TeX,但不适用于 Xe(La)TeX。

如果您想要了解主文件最后更改的时间,请\jobname在下面的宏中将其用作文件名。如果您确实想要了解编译时间,可以使用以下技巧来使用宏:

\edef\pdfilemoddate#1{\pdfcreationdate}

然后让{<filename>}论点保持空洞。


您可以使用以下方式打印(即排版日期、时间和时区)

\filemodprint{<filename>}

仅打印日期或时间+时区

\filemodprintdate{<filename>}
\filemodprinttime{<filename>}

它们使用\thefilemoddate\thefilemodtime来格式化结果。这些宏分别获取{<YYYY>}{<MM>}{<DD>}{<HH>}{<mm>}{<SS>}{<TZ>}作为参数。您可以重新定义它们以自定义格式打印日期或时间。还有一个\thefilemod获取\filemodprint所有七个参数并默认调用其他两个宏。

您还可以创建具有七个参数的自己的宏并使用:

\filemodparse{\mymacro}{<filename>}

那么时区将是#7

相关内容