Преобразование строки в TDateTime в C ++ Builder 2009

Я пытаюсь конвертировать строки в определенных форматах в TDateTime с помощью C ++ Builder 2009:

TDateTime dt, dt2;
TFormatSettings FS, FS2;

UnicodeString datestring = "17/10/2017 13:24:33";
UnicodeString datestring2 = "2017.17.10 13:24:33";

FS.DateSeparator = '/';
FS.ShortDateFormat = "dd/mm/yyyy";
FS.LongTimeFormat = "hh:nn:ss";
FS.TimeSeparator = ':';

FS2.DateSeparator = '.';
FS2.ShortDateFormat = "yyyy.dd.mm";
FS2.LongTimeFormat = "hh:nn:ss";
FS2.TimeSeparator = ':';

try{
dt = StrToDateTime(datestring, FS);
dt2 = StrToDateTime(datestring2,FS2);
}catch(EConvertError& e)
{
int a = 2;
}

Преобразование dt это нормально, но преобразование dt2 выдает исключение:

» 2017.17.10 13:24:33 » не является действительной датой и временем

0

Решение

Согласно документации StrToDate() (что также относится к StrToDateTime()):

S должен состоять из двух или трех чисел, разделенных символом, определенным DateSeparator глобальная переменная или ее TFormatSettings эквивалент. Порядок на месяц, день и год определяется ShortDateFormat глобальная переменная или ее TFormatSettings equivalent—Возможные комбинации: м / д / у, д / м / у и г / м / д.

Дата, которая терпит неудачу, находится в y/d/m формат, который эти функции RTL не поддерживают. Дата, которая работает в d/m/y формат, который поддерживается.

0

Другие решения

Спасибо вам всем!

Хорошо, теперь я знаю, что эти форматы даты не поддерживаются StrToDateTime. Решением этой проблемы является преобразование и объединение Windows ShortDateFormat и LongTimeFormat для форматирования строки, принятой strptime () из time.h. Затем я использую strptime () и создаю TDateTime из тм структура из time.h. Я пытаюсь связать документы, но в документах нет никакой функции strptime. Я нахожу эту функцию в time.h из CodeGear RTL ver 13. Я думаю, что это эквивалентно strptime

0

По вопросам рекламы [email protected]