Les*_*lie 2 delphi formatting datetime
我有一个表格,允许用户输入出生日期:
即:4/16/40
然后,当用户处理表单时,会有一个函数检查它的长度,添加前导零,解析日期,然后使用FormatDateTime返回出生年份:
strTemp := strPostedByDOB;
If Length(strTemp) = 5
then strTemp = '0' + strTemp;
if Length(strTemp) = 6
then begin
strTemp := Copy(strTemp, 1 ,2) + '/' + copy(strTemp, 3, 2) + '/' + Copy(strTemp, 5, 2);
strTemp := FormatDateTime('YYYY', StrToDate(strTemp));
end
else strTemp := EmptyStr;
Run Code Online (Sandbox Code Playgroud)
使用此代码,strTemp计算为2040而不是1940.任何人都可以帮我弄清楚如何让它在strTemp中显示1940?我是否必须更改表单以接受4位数年份?
谢谢,莱斯利
Zoë*_*son 11
您最好的选择是只接受4位数年份,但RTL确实支持更改2位数天的处理方式.在TwoDigitYearCenturyWindow全局变量,或TFormatSettings.TwoDigitYearCenturyWindow现场控制这一点.RTL文档说:
TwoDigitYearCenturyWindow - 确定将字符串日期转换为数字日期时将世纪添加到两位数年份.在提取世纪之前,从当前年份中减去该值.这可用于延长与2位数年份数据输入密不可分的现有应用程序的生命周期.2000年(Y2k)问题的最佳解决方案是不接受2位数年份 - 需要4位数年的数据输入来消除世纪的模糊性.
例子:
Run Code Online (Sandbox Code Playgroud)Current TwoDigitCenturyWindow Century StrToDate() of: Year Value Pivot '01/01/03' '01/01/68' '01/01/50' ------------------------------------------------------------------------- 1998 0 1900 1903 1968 1950 2002 0 2000 2003 2068 2050 1998 50 (default) 1948 2003 1968 1950 2002 50 (default) 1952 2003 1968 2050 2020 50 (default) 1970 2003 2068 2050
因此,如果您只解析生日,您应该能够将TwoDigitCenturyWindow设置为99或100,并且它将始终提供更早的日期.
是的!事实发生十年后,我们仍然遇到了Y2K漏洞.最好明确要求一个4位数的日期.
但是如果你不这样做,你需要某种代码来判断它是否收到了2位数的年份.例如,如果它小于当前年份(10),那么它是一个2000数字,否则,它是一个1900数字.这对于生日来说是有意义的,当然,如果你注册100岁以上的人,它会绊倒.
| 归档时间: |
|
| 查看次数: |
1446 次 |
| 最近记录: |