用于将军事时间转换为标准时间的宏

用于将军事时间转换为标准时间的宏

我正在学习一点 TeX。以下代码运行良好。但如果小时和分钟都小于 10,我不知道如何为它们添加前导零。

感谢您的帮助。

此代码运行良好。输出:

军事时间为:1221 标准时间为:20:21

\documentclass[]{article}

\setlength\parindent{0in}

\newcount\Hour
\newcount\Minute
\Hour=\time
\divide\Hour by 60
\Minute =\Hour
\multiply\Minute by 60
\advance\Minute by -\time
\Minute = -\Minute


\begin{document}

The military time is: \the\time\\
The standard time is: \the\Hour{:}\the\Minute

\end{document}

答案1

\ifnum...<10虽然“军事”时间的定义不明确,但通过测试可以解决个位数的小时和分钟问题:

\documentclass[]{article}

\setlength\parindent{0in}

\newcount\Hour
\newcount\Minute
\Hour=\time
\divide\Hour by 60
\Minute =\Hour
\multiply\Minute by 60
\advance\Minute by -\time
\Minute = -\Minute
\def\tdhour{\ifnum\Hour<10 0\the\Hour\else\the\Hour\fi}
\def\tdmin{\ifnum\Minute<10 0\the\Minute\else\the\Minute\fi}

\begin{document}

The military time is: \the\time\\
The standard time is: \tdhour:\tdmin
\end{document}

在此处输入图片描述

\td...可以更简单地写成

\def\tdhour{\ifnum\Hour<10 0\fi\the\Hour}
\def\tdmin{\ifnum\Minute<10 0\fi\the\Minute}

答案2

我不确定“军事时间”是什么。当您开始 TeX 运行时,内部计数器\time将使用午夜后的分钟数进行初始化。

例如,如果我开始运行 TeX,我会看到 1340,它对应于 22:20(当地时间)。

您不需要计数器来获取 hh:mm 格式的时间,因为 LaTeX 内核已经有保存当前小时和当前分钟的计数器,因此您只需将它们包装在一个命令中,如果数字小于 10,则添加前导零。

\documentclass{article}

\ExplSyntaxOn

\NewExpandableDocumentCommand{\printtime}{}
 {
  \rafiq_twodigits:n { \c_sys_hour_int }
  :
  \rafiq_twodigits:n { \c_sys_minute_int }
 }
\cs_new:Nn \rafiq_twodigits:n
 {
  \int_compare:nNnT { #1 } < { 10 } { 0 } % perhaps add a leading 0
  \int_to_arabic:n { #1 } % print the number
 }

\ExplSyntaxOff

\begin{document}

Minutes past midnight: \the\time

Local time: \printtime

\end{document}

在此处输入图片描述

答案3

您的问题是:如何以两位数形式打印分钟。我正在使用\Othe可以通过以下方式定义的宏:

\def\Othe#1{\ifnum#1<10 0\fi\the#1}

并使用:

Time is \the\hours:\Othe\minutes.

如果你正在使用 OpTeX,那么这个计算(基于 \directlua)就可以使用了,因为它是 OpTeX 技巧第 0055 章使用自动加载的宏\sethours。它将\hours\minutes寄存器设置为当前\time寄存器中的适当值。而且\Othe宏也是自动加载的。因此,您只能这样写:

\sethours

Minutes past midnight:: \the\time.

Local time: \the\hours:\Othe\minutes.

\bye

答案4

这个问题让我很困惑。据我所知,您有美国时间(上午、下午)、欧洲时间(17:00)和军事时间(1700)。所以这意味着回答标题中的问题:你只需要删除一个冒号。给出的值\the\time不是军事时间,只是自午夜以来的分钟数。

为了更简单地重新创建它(如果这是您想要的?),您可以使用

\usepackage{datetime2}

\DTMnewtimestyle{customtimestyle}{%
  \renewcommand{\DTMdisplaytime}[3]{
    #1:#2
  }
}

\DTMsettimestyle{customtimestyle}

\begin{document}

time: \DTMcurrenttime

\end{document}

\renewcommand块中,参数#1#2#3分别给出小时、分钟和秒。尽情发挥吧!

输出:

在此处输入图片描述

相关内容