Я написал приведенный ниже код и протестировал его на разных платформах. Я получил другие результаты на 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). Я не мог найти соответствующую документацию для этого эксцентричного поведения. Кто-нибудь поможет мне понять это?
В HP-UX ia64, когда я предоставляю заданный часовой пояс как, TZ = CET, он просто считает его идентичным UTC. Согласно документации HP-UX на ссылка на сайт акцент мой,
«TZ может быть установлен с использованием формата:
[:] STDoffset [DST [смещение] [, править]]»
Смещение здесь является обязательным и представляет «значение, которое должно быть добавлено к местному времени, чтобы прибыть в UTC».
Таким образом, без смещения HP-UX считает STD таким же, как UTC.
Других решений пока нет …