GMT 纪元时间

epoch time for GMT

AIX

date -u 以 GMT 格式给出日期和时间
date 给出本地时区的日期和时间
date +%s 以纪元时间给出当地时间

有没有办法以纪元格式获取 GMT 时间?

在我使用的 AIX 中,只有 -n 和 -u 选项可用(因此我无法使用 -f 选项)。

我的目标是计算本地时间和格林威治标准时间之间的时差。

我可以解析 $TZ environment variable,这可能很乏味。相反,将两次之间的纪元时间差除以 60 应该可以大致给出答案。

与您所说的相反 date +%s 并没有 'give local time in epoch time'。 Epoch 是 AIX (UNIX) 时间开始计时的时刻(在 time_t 结构中)。 time_t 中的时间戳以纪元以来的秒数为单位,不计算闰秒。这就是date +%sreturns。来自 date 手册页:

   %s
        Displays the number of seconds since January 1, 1970, Coordinated Universal Time (CUT).

在 AIX 上解析 TZ 并不像您想象的那么乏味。与 Linux 和其他 UNIX 系统不同,TZ 在 AIX 上的构建方式始终是 std offset dst offset , rule 因此以下内容应该可以从 TZ 中提取当前偏移量:

echo $TZ | sed -e 's/.*'`date +%z`'\([-0-9:]*\).*//'

但是我认为最好和最简单的解决方案是显示您想要的内容的迷你 C 程序:

#include <time.h>
#include <stdio.h>

int main()
{
  tzset();
  printf("%d\n", timezone);
}

示例:

$ cc -o tz_offset tz_offset.c
$ TZ=CET-1CEST-2 ./a.out
-3600
$ TZ=EST5EDT ./a.out
18000

有关详细信息,请参阅:

  • man environment
  • man date
  • man ctime