Показать сообщение отдельно
Старый 15.01.2015, 13:22   #122  
leva is offline
leva
Участник
 
52 / 36 (2) +++
Регистрация: 03.08.2005
После установки CU8 новые часовые пояса не появились, а вот с установкой KB3012215 (уже после CU8) - да. При этом, никаких автоматических обновлений дат в существующих записей не произошло (не смотря на то, что MS пишут что TZID поля для того и нужны и "Upgrades provided by Microsoft automatically make these corrections when they update time zone and DST rules.", а отдельного патчера, как известно, в 2012 уже нет.

И по-другому видимо стало интерпретироваться SDAY. Всегда это был номер недели в месяце (5 = последняя неделя). И в новых записях TIMEZONESRULESDATA так и настроено:
RULEID=61005, TZENUM=61, YEAR=2014, BIAS=-180, ..., SYEAR=2014, SMONTH=10, SDAYOFWEEK=0, SDAY=5, SHOUR=2, ... Т.е. воскресенье последней недели, что соответствует 26 октября когда и был перевод.

Но в реальности это интерпретируется как 5 октября:
X++:
info(strFmt("%1", DateTimeUtil::getDifference(dtu, DateTimeUtil::applyTimeZoneOffset(dtu, DateTimeUtil::getUserPreferredTimeZone())) / 3600));
Для 4 октября выдает -4,00 (dtu = 2014-10-04T14:01:36), для 5-го (dtu = 2014-10-05T14:01:36) уже -3.
А для 2009 года уже работает правильно, для 24 октября (dtu = 2009-10-24T14:01:36) -4 и для 25 октября (последнее воскресенье в 2009-м) (dtu = 2009-10-25T14:01:36) -3, хотя запись в TIMEZONESRULESDATA настроена также.

Может я где-то ошибся, хорошо бы если кто-то проверил выполнить на своем приложении с CU8.