TXSDateTime — неожиданные результаты = C Builder 2007

#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 прямо сейчас!