parser

Написать ответ на текущее сообщение

 

 
   команды управления поиском

Ответ

moko 16.11.2015 20:12

тот же dtf просто смещал дату, обнаружив зону.
На всякий случай поясню, что ^dt.roll[TZ] не изменяет дату (результат ^dt.gmt-string[] не изменится), а меняет часовой пояс, в котором выводится дата. Поэтому в dft считается разница и добавляется:
^dt.roll[TZ;$sTZ]
$iDiff(^date::create($dt.year;$dt.month;$dt.day;$dt.hour;$dt.minute;$dt.second) - $result)
$result[^date::create($dt - $iDiff)]
Но время очень нелогично. :) Отнять три часа и прибавить три часа - совсем не одно и тоже, поскольку бывают переводы часов (в примере перевод 2010-03-28 2:00 на час вперед), в такие моменты dft ошибался (ниже код для Linux, в отличии от Windows он хранит историю переводов времени). Так что к лучшему, что эти переводы отменили. :)
$n[^date::create[2010-03-28 3:30]]
правильно: ^n.sql-string[] (^n.gmt-string[])
$d[^dtf:from822[^n.gmt-string[]]]
неправильно: ^d.sql-string[]
Результат:
правильно: 2010-03-28 03:30:00 (Sat, 27 Mar 2010 23:30:00 GMT)
неправильно: 2010-03-28 01:30:00

(в 23:30 часы еще не переведены и одна разница с GMT, а на самом деле в 3:30 они уже переведены и другая разница с GMT).