Преобразование строки в 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 '' не является действительной датой и временем
2 ответа
Спасибо вам всем!
Хорошо, теперь я знаю, что эти форматы даты не поддерживаются StrToDateTime. Решением этой проблемы является преобразование и объединение Windows ShortDateFormat и LongTimeFormat для форматирования строки, принятой strptime() из time.h. Затем я использую strptime() и создаю TDateTime из структуры tm из time.h. Я пытаюсь связать документы, но в документах нет никакой функции strptime. Я нахожу эту функцию в time.h из CodeGear RTL ver 13. Я думаю, что это эквивалентно strptime
Согласно документации StrToDate()
(что также относится к StrToDateTime()
):
S
должен состоять из двух или трех чисел, разделенных символом, определеннымDateSeparator
глобальная переменная или ееTFormatSettings
эквивалент. Порядок на месяц, день и год определяетсяShortDateFormat
глобальная переменная или ееTFormatSettings
эквивалентно - возможные комбинации: m / d / y, d / m / y и y / m / d.
Дата, которая терпит неудачу, находится в y/d/m
формат, который эти функции RTL не поддерживают. Дата, которая работает в d/m/y
формат, который поддерживается.