在 AIX
上 date -u
以GMT格式提供日期和时间
date
以当地时区提供日期和时间
date +%s
给出了纪元时间的当地时间
有没有办法以时代格式获得GMT时间?
在我使用的AIX中,只有-n和-u选项可用(所以我不能使用-f选项)。
我的目标是计算当地时间和格林尼治标准时间之间的小时偏差。
我可以解析$TZ environment variable
这可能是单调乏味的。相反,将纪元时差在两倍之间除以60应该给我答案。
答案 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