我想更改文档中某个部分的时区。与服务器时间相差一小时就足够了。使用 datetime 包,如何从日期 \today 中添加或减去小时数?
使用 advdate 和 datetime 我只能成功地从 \today 中添加或减去整数天数。
\usepackage{datetime}
\usepackage{advdate}
\daymonthyear{\AdvanceDate[-1]\today \space \currenttime}
输出恰好 1 天前的 UTC 日期和时间。
答案1
问题并没有真正明确预期的输入和输出是什么,但是这里是使用该datetime2
包的猜测。
此包定义了一个命令,用于将给定时间转换为祖鲁时间,即 UTC+00:00(也称为 GMT)。此命令接受时区作为参数。当您打印这样的日期时,显示的日期将转换为您用于编译文档的系统的时区。因此,您可以使用它通过提供不同的时区作为参数来在显示的日期中添加或减去小时数。转换还会考虑日期。
在下面的 MWE 中,我定义了一个\modifytz
带有三个参数的辅助命令:原始 datetime 对象(使用\DTMsavenow
或获得\DTMsavetimestamp
)、新 datetime 对象和时区偏移量。原始和新 datetime 对象可以相同,在这种情况下,原始对象会被覆盖。辅助命令从 datetime 对象中提取年份、月份等值,以用作 的参数\DTMsaveaszulutime
。
请注意,正偏移量会使时间向后移动,负偏移量会使时间向前移动。我自己的时区是 UTC+01:00,如果你处于负时区,那么情况可能正好相反。
该代码演示了如何使用当前时间(类似于\today
)和手动输入的时间来显示日期变化。
梅威瑟:
\documentclass{article}
\usepackage[showzone=false]{datetime2}
\usepackage{datetime2-calc}
\newcommand{\modifytz}[3]{%
\DTMsaveaszulutime{#2}{\DTMfetchyear{#1}}{\DTMfetchmonth{#1}}{\DTMfetchday{#1}}{\DTMfetchhour{#1}}{\DTMfetchminute{#1}}{\DTMfetchsecond{#1}}{#3}{00}%
}
\begin{document}
\DTMsavenow{now}
[Compiled \DTMuse{now}]
\modifytz{now}{newtime}{1}
[Compiled \DTMuse{newtime}]
\modifytz{now}{now}{-3}
[Compiled \DTMuse{now}]
\DTMsavetimestamp{latenight}{2021-04-07T23:15:00Z}
Late night: \DTMuse{latenight}
\modifytz{latenight}{diffday}{-2}
Different day: \DTMuse{diffday}
\end{document}
结果:
答案2
\documentclass{article}
\usepackage[nodayofweek]{datetime}
\begin{document}
% Format output
\ddmmyyyydate
% Un-adjusted
[Compiled \today, \currenttime]
\par
% advance the hour register by nr of hours
% negative values if you want to subtract
\advance\currenthour by 2
%Adjusted output
[Compiled \today, \the\currenthour:\the\currentminute]
\end{document}