GMT的纪元时间

时间:2015-07-06 12:06:01

标签: date timestamp unix-timestamp aix timezone-offset

AIX

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

有没有办法以时代格式获得GMT时间?

在我使用的AIX中,只有-n和-u选项可用(所以我不能使用-f选项)。

我的目标是计算当地时间和格林尼治标准时间之间的小时偏差。

我可以解析$TZ environment variable这可能是单调乏味的。相反,将纪元时差在两倍之间除以60应该给我答案。

1 个答案:

答案 0 :(得分:0)

与你所说的date +%s没有'在一个时代给出当地时间'相反。 Epoch是AIX(UNIX)时间开始计数的时刻(在time_t结构中)。 time_t中的时间戳以纪元为单位以秒为单位给出,不计算闰秒。这是date +%s返回的内容。从date手册页:

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

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

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

但是我认为最好和最简单的解决方案是显示您想要的迷你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