我正在使用 ShareLaTeX,对于那些不知道的人来说,这是一个在服务器上编译 LaTeX 的网站。问题是,当我输入 时\today
,它会给我服务器的日期。例如,现在是 10 月 8 日晚上 10:00(美国东部标准时间),它给了我October 9, 2013
。有什么方法可以强制使用 EST?最好是整个文档都使用。
答案1
对我来说,EST(UTC-05)和EDT(UTC-06)几乎总是比我的时区晚六个小时。
使用datetime
包提供了一些用于格式化和打印时间戳的计数,我们可以简单地测试当前小时(服务器的小时)是否低于天数,6
如果低于,则从天数中减去1
。当然,您还需要测试它是否是当前月份的第一天,并且需要考虑闰年。
当然,你也可以只设置一个特定的\today
:
\def\today{It's always today.}
该datetime
软件包提供了更多格式化日期等的选项。
代码
\documentclass{article}
\usepackage{datetime}
\pagestyle{empty}
\begin{document}
\currenttime, \today
\ifnum\currenthour<6
\advance\currenthour+18
\ifnum\day=1
\testifleapyear\year
\ifnum\month=1 \month13\advance\year-1\fi
\advance\month-1
\day\ifcase\month\or31\or\ifDTleapyear 29\else 28\fi\or31\or30\or31\or30\or31\or
31\or30\or31\or30\or31\fi
\else\advance\day-1\fi
\else\advance\currenthour-6\fi
\currenttime, \today
\end{document}
输出
2013 年 10 月9日星期三 04:52 2013 年 10 月8日
星期二 22:52
答案2
你可以对 的定义做一些小改动\today
。下面是一些事情的开始:
它让您只设置 EST 和远程服务器时间之间的小时时差。(对于闰年的 2 月 28 日、29 日或 3 月 1 日,此功能将无法正常工作!)
它的工作原理是查看\time
并计算 LaTeX 的内部\time
值(以午夜的分钟数为单位)与您的当地时间 (EST) 之间的差异。根据该差异,您需要前进一天、保持在同一天或后退一天。这可能会触发其他更改,例如月份和年份。
\documentclass{article}
\makeatletter
%% save time/day/month
\def\ae@test@time{0}
%% personalized version of `\today`
\def\mytoday{%%
\ifnum\ae@test@time<0\relax
%% Go Back a day:
\ae@set@day@back
\else
\ifnum\ae@test@time>1440\relax
%% Go Forward a day:
\ae@set@day@forward
\else
%% It's just today:
\fi
\fi
\today
}
%% Code to set the day back by one
%% If it's the first of the month, then you need to also
%% set the month back a day. If it's January and the first of the month
%% you'll need to set the year back.
\def\ae@set@day@back{%%
\ifnum
\number\numexpr\day\relax=1\relax
\ifnum
\number\numexpr\month\relax=1\relax
\month=12\relax
\advance\year-1\relax
\else
\advance\month-1\relax
\fi
\ifcase\number\numexpr\month\relax
%% no month "0"
\or
\day=31\relax\or%%<-- Jan
\day=28\relax\or%%<-- Feb
\day=31\relax\or%%<-- March
\day=30\relax\or%%<-- April
\day=31\relax\or%%<-- May
\day=30\relax\or%%<-- Jun
\day=31\relax\or%%<-- July
\day=31\relax\or%%<-- Aug
\day=30\relax\or%%<-- Sept
\day=31\relax\or%%<-- Oct
\day=30\relax\or%%<-- Nov
\day=31\relax%%%%%<-- Dec
\fi
\else
\advance\day-1\relax
\fi}
%% Code to set the day forward by one
%% You need to test whether it is the last day of the month.
%% If it's the last day of the month, you need to advance the month.
%% If it's December and the last day of the month, you need to
%% advance the year.
\def\ae@set@day@forward{%%
\ifcase\number\numexpr\month\relax
\or
\edef\test@day{31}\or%%<-- Jan
\edef\test@day{28}\or%%<-- Feb
\edef\test@day{31}\or%%<-- March
\edef\test@day{30}\or%%<-- April
\edef\test@day{31}\or%%<-- May
\edef\test@day{30}\or%%<-- Jun
\edef\test@day{31}\or%%<-- July
\edef\test@day{31}\or%%<-- Aug
\edef\test@day{30}\or%%<-- Sept
\edef\test@day{31}\or%%<-- Oct
\edef\test@day{30}\or%%<-- Nov
\edef\test@day{31}%%%%%<-- Dec
\fi
\advance\day+1\relax
\ifnum\number\numexpr\day\relax>\test@day\relax
\day=1\relax
\ifnum\number\numexpr\month=12\relax
\month=1\relax
\advance\year+1\relax
\else
\advance\month+1\relax
\fi
\fi
}
%% Code for setting up the hour difference between EST and the time the remote
%% computer is using. Set this by "hours".
\def\time@difference{0}
\def\settimedifference#1{\edef\time@difference{\number\numexpr60*#1\relax}%%
\edef\ae@test@time{\number\numexpr\time+\time@difference\relax}}
\makeatother
\begin{document}
%% Just testing at various month/year boundaries:
\day=1\relax
\month=10\relax
%% setting up the time difference
%%\settimedifference{-21}
\settimedifference{-21}
Getting today: \mytoday
\end{document}
这个方法相当粗糙。目前它无法正确计算闰年。但它应该能告诉你你可以做些什么。