我编写了以下代码并在不同平台上进行了测试。与其他平台相比,我在HP-UX IA64上获得了不同的结果。
代码:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(void)
{
time_t t;
struct tm *gmt, *lat, ldummy;
tzset();
printf("Local timezone: TZ=%s\n\n", getenv("TZ"));
t = 1394881705;
lat = localtime(&t);
printf("Local time is : %s", asctime(lat));
gmt = gmtime(&t);
printf("GMT is : %s", asctime(gmt));
return 0;
}
输出: -
Linux的
$ ./a.out
Local timezone: TZ=CET
Local time is : Sat Mar 15 12:08:25 2014
GMT is : Sat Mar 15 11:08:25 2014
SunOS的
$ ./a.out
Local timezone: TZ=CET
Local time is : Sat Mar 15 12:08:25 2014
GMT is : Sat Mar 15 11:08:25 2014
AIX
$ ./a.out
Local timezone: TZ=CET
Local time is : Sat Mar 15 12:08:25 2014
GMT is : Sat Mar 15 11:08:25 2014
(这就是问题所在) HP-UX IA64
$ ./a.out
Local timezone: TZ=CET
Local time is : Sat Mar 15 11:08:25 2014
GMT is : Sat Mar 15 11:08:25 2014
我试图理解为什么在HP-UZ IA64(版本是11.31)的情况下输出是不同的。我找不到任何有关这种古怪行为的相关文档。有人会帮我理解这个吗?
答案 0 :(得分:1)
在HP-UX ia64上,当我将set timezone设置为TZ = CET时,它只是将其视为与UTC相同。根据{{3}}强调我的HP-UX文档,
“TZ可以使用以下格式设置:
[:] STDoffset [DST [偏移] [,规则]]“强>
此处的偏移是强制性的,表示“必须添加到当地时间以达到协调世界时(UTC)的值。”
因此,在没有偏移的情况下,HP-UX认为STD与UTC相同。