字元串轉TDateTime的時候,如果格式與系統的長短日期不符合,就會報異常,此時一個通用的解決方法為,軟體啟動的時候設定軟體的長短日期格式,如下圖所示:
Application->UpdateFormatSettings = false;
FormatSettings.ShortTimeFormat = "HH:NN:SS";
FormatSettings.ShortDateFormat = "yyyy-mm-dd";
FormatSettings.DateSeparator = '-';
這樣,TDateTime dtTmp(“2018-05-01 10:10:10”)或者StrToDateTime(“2018-05-01 10:10:10”); 無論系統的短日期格式是何種格式,軟體都不會報錯。
但如果日期時間字元串來自其他地方,格式不明确,比如:
TDateTime dtTmp(Query->FiledByName(“FileTime”)->AsString);
如果此時Query檢索出來的日期時間格式為"yyyy/mm/dd",則會報EConvertError異常:“xx/xx/xx xx:xx:xx is not a valid date and time”。
為了解決這種問題,可以使用另外一種字元串轉TDateTime:
VarToDateTime(String)
此函數相容長短格式的日期時間字元串,比如2018/05/01 10:10:10 和2018-05-01 10:10:10,但如果字元串是無意義的字元串,比如空字元串或其他字元串,比如“abc”,則會抛出異常:EVariantTypeCastError,Could not convert variant of type (String) into type (Date) 。