LINUX.ORG.RU

непонятность с date, MSK и MSD

 ,


0

1

Приветствую.

Зону MSD вроде бы отменили три года назад. Соответственно, вот тут по идее должны быть одинаковые результаты:

$ TZ=Asia/Irkutsk date --date='Wed Dec 24 00:00:01 MSD 2013'
Tue Dec 24 05:00:01 IRKT 2013
$ TZ=Asia/Irkutsk date --date='Wed Dec 24 00:00:01 MSK 2013'
Tue Dec 24 06:00:01 IRKT 2013

Скажите, пожалуйста, чего я не понимаю? Почему правильный результат с MSD (и UTC+4)?

★★★★★

Ответ на: комментарий от pztrn

Все равно не понимаю. Какая может быть разница между MSD и MSK для 2013 года? tzdata, если что 2013i.

dmiceman ★★★★★
() автор топика

Летнее время в Москве - UTC+4. И по нему мы живем. MSD - Moscow Daylight Time (Московское Летнее время). У Иркутска +5 к Москве (ибо UTC+9).

А MSK, я подозреваю, осталось как наследие.

Откуда у тебя 5 звезд?)

pztrn ★★★★
()
Последнее исправление: pztrn (всего исправлений: 1)
Ответ на: комментарий от pztrn

Мне кажется, наоборот, MSD отменили, MSK теперь UTC+4.

% date                   
Thu Jan 16 06:03:31 MSK 2014
% TZ=Europe/Moscow date --date='Wed Dec 24 00:00:01 MSK 2013'
Tue Dec 24 00:00:01 MSK 2013
% TZ=Europe/Moscow date --date='Wed Dec 24 00:00:01 MSD 2013'
Tue Dec 24 00:00:01 MSK 2013
А вот почему при конвертации в иркутское время получаются разные значения, я понять не могу. Думал, какой-то баг, связанный с неправильным названием дня недели, но нет... Видимо, кто-то ворует по дороге час.

proud_anon ★★★★★
()
Последнее исправление: proud_anon (всего исправлений: 1)
Ответ на: комментарий от pztrn

А MSK, я подозреваю, осталось как наследие.

Нет, все наоборот, MSD отменили. Рекомендую почитать что написано по первой ссылке в первом комментарии темы.

Откуда у тебя 5 звезд?)

Флудил много.

dmiceman ★★★★★
() автор топика
Ответ на: комментарий от proud_anon

Но самая-то засада не в этом, засада вот:

$ date +%s --date='Wed Dec 24 00:00:01 MSK 2013'
1387832401
$ date +%s --date='Wed Dec 24 00:00:01 MSD 2013'
1387828801

То есть оно просто как-то неправильно обрабатывает таймзоны в строке. Да и черт бы с ним, но вот php-шная strtotime() ведет себя точно аналогично…

dmiceman ★★★★★
() автор топика
Ответ на: комментарий от dmiceman

Залез в сырцы. В coreutils и php оно реализовано по разному, но в обоих случаях там суровое древнее колдунство с yacc и re2c. parse-datetime.y в coreutils происходит из 1990 года. Копать сейчас не хочется.

dmiceman ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.