【发布时间】:2017-10-17 12:25:02
【问题描述】:
我尝试使用 C++Builder 2009 将特定格式的字符串转换为 TDateTime:
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'' 不是有效的日期和时间
【问题讨论】:
-
非常奇怪的日期格式,但您的测试用例的等效 Delphi 版本适用于 FPC:ideone.com/Pr9ROO。现在无法检查真正的 Delphi 在做什么。
-
是的。在 Lazarus 1.6.4 上工作正常,但在 C++ Builder 2009 上 reise 异常:(
-
您正在声明
TFormatSettings变量,但在自定义它们的字段之前,您没有使用默认值初始化它们。您必须使用TFormatSettings::Create()或GetLocaleFormatSettings()初始化它们。另外仅供参考,StrToTime()(并且通过扩展,StrToDateTime()不使用LongTimeFormat
标签: c++ c++builder vcl tdatetime c++builder-2009