0

我尝试将特定格式的字符串转换为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'' 不是有效的日期和时间

4

2 回答 2

1

根据StrToDate()(也适用于StrToDateTime())的文档:

S 必须由两个或三个数字组成,由 DateSeparator 全局变量或其TFormatSettings 等价物定义的字符分隔。月、日和年的顺序由 ShortDateFormat 全局变量或其TFormatSettings 等效变量决定——可能的组合是 m/d/y、d/m/y 和 y/m/d

失败的日期是y/d/m这些 RTL 函数不支持的格式。有效的日期d/m/y是受支持的格式。

于 2017-10-17T15:44:58.810 回答
0

谢谢你们!

好的,现在我知道了,StrToDateTime 不支持这种日期格式。此问题的解决方案是,将 Windows ShortDateFormat 和 LongTimeFormat 转换并合并为 strptime() 从 time.h 接受的格式字符串。然后我使用 strptime() 并从 time.h 的tm结构创建 TDateTime。我尝试链接文档,但是在文档中没有任何 strptime 函数。我在 CodeGear RTL 版本 13 的 time.h 中找到了这个函数。我认为这相当于strptime

于 2017-10-18T06:29:58.907 回答