#delphi #c builder #c builder-2007
#дельфи #конструктор c #конструктор c -2007
Вопрос:
Вот некоторый код:
WideString dt = L"2019-04-06T11:08:19.578 01:00";
TXSDateTime * utc = new TXSDateTime();
utc->XSToNative(dt);
ShowMessage(utc->AsDateTime.DateTimeString());
ShowMessage(utc->AsUTCDateTime.DateTimeString());
ShowMessage(String(utc->HourOffset));
Я бы ожидал увидеть эти строки …AsDateTime и …AsUTCDateTime возвращает разные результаты. Но они этого не делают. В обоих случаях результатом является:
06/04/2019 10:08:19
Значение HourOffset равно 1, поэтому разве AsUTCDateTime не должен возвращать 11:08:19 в качестве временной части? Или я неправильно понимаю, как работают эти функции?
Комментарии:
1. Может быть, часовой пояс установлен неправильно?
2. На каком языке этот код? Пожалуйста, уточните свои теги.
Ответ №1:
Прочитав XBUtils.pas
, есть 2 функции:
function TXSBaseCustomDateTime.GetAsDateTime: TDateTime;
(Строка 1448)
function TXSBaseCustomDateTime.GetAsUTCDateTime: TDateTime;
(Строка 1478)
Версия UTC принимает строку даты и корректирует ее на 1 час.
Версия, отличная от UTC, принимает дату в строке и корректирует ее КАК по смещению времени в строке, ТАК И по смещению часового пояса локального компьютера от UTC.
Поскольку я нахожусь в Лондоне, это локальное смещение в настоящее время равно 0, и поэтому, по совпадению, результаты двух функций идентичны. Если бы был активен переход на летнее время, то версия, отличная от UTC, была бы скорректирована для этого, и это дало бы другой результат.
Комментарии:
1. Хорошая находка о смещении локального часового пояса, равном 0 прямо сейчас!