用户将输入日期的字符串值。StrToDate将用于将字符串值转换为DateTime。如果用户输入的日期是2位数字的年份,则该日期可能被解析为当前世纪(20xx)或上一个世纪(19xx)。
为了消除歧义,如何要求用户输入4位数字的年份?
if isFourDigitYear(txbDate.Text) then
date := StrToDate(txbDate.Text)
else
ShowMessage('enter date with 4 digit year');
一种可能性是这样的:
FUNCTION IsFourDigitYear(DateStr : STRING ; DateSep : CHAR = '/') : BOOLEAN;
VAR
P : Cardinal;
BEGIN
DateStr:=DateStr+DateSep; Result:=TRUE;
REPEAT
P:=POS(DateSep,DateStr);
IF P=5 THEN EXIT;
DELETE(DateStr,1,P)
UNTIL DateStr='';
Result:=FALSE
END;
它将检查给定字符串中是否包含4个字符的一部分。
当前它不会检查该部分是否为数字(即仅包含数字)。如果您希望将其真正国际化,则需要输入使用的分隔符。某些国家/地区使用“-”作为日期分隔符,世界上其他大多数国家/地区都没有使用奇怪的M / D / Y格式,但D / M / Y或Y / M / D格式(在某些国家/地区,“ /”可能是“-”)。
如果您想要一个真正的国际功能,该功能还检查四位数部分是否实际上在当前有效日期格式的年份部分中,那么它将需要更复杂的解析器。以上可能会让您入门,但是...
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句