我正在尝试验证用户使用 TryStrToDate 输入的日期,以确保它们可以正确显示在我正在处理的应用程序的屏幕上,但不知道它到底是如何工作的。当输入长度不完全为 10 个字符的有效日期时,我希望能够返回 False。
例如,09/02/2012 将返回 True,但 09/2/2012 或 9/02/2012 将返回 False。
我想保持这个简单,所以我只对使用 TryStrToDate 感兴趣,但如果有另一个内置函数可以做到这一点,那也一样好。用户输入的数据在输入时经过验证,仅允许 10 个字符的日期。
因此,我目前正在使用类似的东西:
var
tempStr: string;
tempDate: TDateTime;
fs: TFormatSettings;
error: Boolean;
count: Integer;
begin
tempStr := '09/2/2012'; //example of a date that should be rejected.
GetLocaleFormatSettings(2048, fs);
error := not TryStrToDate(tempStr, tempDate, formatSettings);
if not error then
begin
error := True;
if Length(tempStr) = 10 then
begin
count := Length(tempStr) - Length(StringReplace(tempStr, '/', '', [frReplaceAll]));
error := not (count = 2);
end
end
end
哪个工作得很好,但是还有一个数据实例是通过 XML 从 .csv 文件导入的,它可以有任何格式。
我目前的解决方案似乎仍然有效,但我想知道是否有一种方法可以通过使用 TryStrToDate 并让它只接受我需要的 10 个字符格式的有效日期来最小化处理。我尝试手动设置短日期格式:
fs.ShortDateFormat := 'mm/dd/yyyy';
但 TryStrToDate 始终接受有效日期,即使它们的长度不完全是 10 个字符。
我理想的解决方案是将其保留为:
error := not TryStrToDate(tempStr, tempDate, fs);
只是想知道是否可以使用 TryStrToDate 或其他一些德尔福函数。
任何帮助是极大的赞赏!
顺便说一句,我正在使用 Delphi 7。