Пара наблюдений относящихся к встроенной перловой функции
localtime:
- Заданное в секундах с начала эпохи время вполне может быть отрицательным - то есть можно работать с датами до 1 января 1970 года.
- Разница между местным временем, возвращаемым функцией localtime и временем по Гринвичу (функция gmtime) непостоянна. Само по себе это не удивительно - существует же кое-гд до сих пор летнее время. Удивительнее другое: разница эта, если залезть поглубже, иногда не является целым числом часов - можно проверить, например, как менялась она начиная с 1900 года:
#!/usr/bin/perl
use POSIX qw( strftime );
my $SEC_PER_DAY = 24*60*60;
my $old_time = '';
for my $day ( -25567 .. 0 )
my @moment = localtime( $day * $SEC_PER_DAY );
my $time = strftime '%X', @moment; # HH:MM:SS
if ( $old_time ne $time )
printf
"%s %s\n",
strftime( '%x', @moment ),
$time;
$old_time = $time;
Результат неожиданный:
- 01.01.1900 04:02:33
- 03.07.1916 03:45:05
- 16.07.1919 04:00:00
- 21.06.1930 05:00:00
и не всегда понятный: если 04:02:33 ещё как-то можно объяснить - это время соответствует долготе 60,6375° в. д. -
пара километров от нынешнего центра Екатеринбурга, то 03:45:05 откуда? Ближайший крупный город с долготой 56,2708° в. д. -
Пермь. Что-то я сильно сомневаюсь, что в дореволюціонномъ Челябинске действовало пермское время.
http://shoorick.ru/2017/02/07/localtime/