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