在C ++ Builder 2009中将字符串转换为TDateTime

时间:2017-10-17 12:25:03

标签: c++ c++builder vcl tdatetime c++builder-2009

我尝试使用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''不是有效的日期和时间

2 个答案:

答案 0 :(得分:0)

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

  

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

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

答案 1 :(得分:0)

谢谢大家!

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