强制 \today 使用 EST

强制 \today 使用 EST

我正在使用 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}

这个方法相当粗糙。目前它无法正确计算闰年。但它应该能告诉你你可以做些什么。

相关内容