strftime '%z' (местное время) не работает должным образом на машинах Solaris

Я пробовал этот код на Linux-машинах,

my $sysdate = strftime "%Y%m%d%T", (localtime);    
my $daylight_saving_time = strftime '%z', (localtime);

я получаю ниже вывода,

sysdate = 2013051402:12:02    
daylight_saving_time = -0400

Я пробовал то же самое на солнечных батареях, я получил это

sysdate = 2013051402:12:02
daylight_saving_time = %z

Кто-нибудь знает, что нужно сделать, чтобы получить летнее время в солнечных батареях.

Заранее спасибо.


person user2380503    schedule 14.05.2013    source источник
comment
nntp.perl.org/group/perl.beginners/ 2003/01/msg39201.html   -  person perreal    schedule 14.05.2013
comment
спасибо, это помогло мне. :)   -  person user2380503    schedule 15.05.2013


Ответы (2)


Проблема в том, что POSIX::strftime просто вызывает strftime(3) вашей системы, так что вы получаете то, что есть или нет. %z не является частью стандарта POSIX.1 и несовместим в разных системах. В других более старых версиях ОС, таких как HPUX, %z совпадает с %Z (имя часового пояса). Это только для старых версий.

В Solaris 8, 9 strftime не поддерживает %z, а в Solaris 10 поддерживает.

Это относится к более современным версиям Solaris 10 и Solaris 11:

%z Заменяется смещением от UTC в стандартном формате ISO 8601:2000 (+ччмм или -ччмм) или отсутствием символов, если невозможно определить часовой пояс. Например, «-0430» означает отставание от UTC на 4 часа 30 минут (к западу от Гринвича). Если tm_isdst равно нулю, используется стандартное смещение времени. Если tm_isdst больше нуля, смещение летнего времени, если оно используется. Если tm_isdst имеет отрицательное значение, никакие символы не возвращаются.

Итак, это проблема функции библиотеки C, perl находится поверх этих библиотек. У меня нет обходного пути.

person jim mcnamara    schedule 15.05.2013

Возможно, Date::Manip::TZ работает на Solaris:

   use Date::Manip::TZ;
   my $tz = new Date::Manip::TZ;
   say "tz: $tz";
person user1126070    schedule 14.05.2013