2014-12-07 2 views
1

Я потребляющих веб-сервиса/мыла и загрузка XML таблицы для в ClientDataSet, у меня есть узел с датами в следующем формате:Преобразовать дату и время XML в TDateTime в Delphi

2014-01-01T00:00:00.0000000-02:00

Я пытаясь преобразовать этот тип данных для регионального моего типа, я использую это:

class function TDateConvert.DateTimeFromIso8601(const Value: string): TDateTime; 
begin 
    with TXSDateTime.Create() do 
    try 
    XSToNative(value); // convert from WideString 
    Result := AsDateTime; // convert to TDateTime finally 
    finally 
    Free(); 
    end; 
end; 

Я получаю, но дата приходит неправильно, используя этот пример выше, вместо того, чтобы вернуться 01/01/2014 31/12/2013 - рету rning, это формат даты, используемый в Бразилии (dd/MM/YYYY).

Как я могу это решить? Это связано с моими региональными настройками (Бразилия)?

EDIT

я должен использовать функцию Timezonebias от IdGlobalProtocols исправить дату, выполните следующие ниже функции, чтобы помочь кому-то:

class function TDateConvert.DateTimeFromIso8601(const Value: string): TDateTime; 
begin 
    with TXSDateTime.Create() do 
    try 
    XSToNative(value); // convert from WideString 
    Result := AsDateTime+TimeZoneBias; // convert to TDateTime finally with sum of timezone bias 
    finally 
    Free(); 
    end; 
end; 
+2

Если вы собираетесь использовать Indy в любом случае, вы можете рассмотреть возможность его синтаксического анализа и ввода, например, с помощью функции 'GMTToLocalDateTime(). –

ответ

2

Вы UTC -02:00 в вашей части времени и когда время преобразуется в местное время, когда ваша дата заканчивается до дня.

+0

Вы правы, я googling и нашел www.w3.org/TR/2004/REC-xmlschema-2-20041028/datatypes.html. Я нашел Timezonebias const из модуля IdGlobalProtocols и суммировал результат. –

+0

Спасибо за помощь. –