是否有将 2 位数年份转换为 4 位数年份的首选算法?
我有一个要转换为 C# 的 2 位出生日期(以及月份和日期)DateTime
。显然,出生日期不可能是未来,但 .NET 中是否存在将 2 位数年份转换为 4 位数年份的现有工具?
是否有将 2 位数年份转换为 4 位数年份的首选算法?
我有一个要转换为 C# 的 2 位出生日期(以及月份和日期)DateTime
。显然,出生日期不可能是未来,但 .NET 中是否存在将 2 位数年份转换为 4 位数年份的现有工具?
static int GetFourDigitYear(int year, int maxYear)
{
System.Globalization.GregorianCalendar cal =
new System.Globalization.GregorianCalendar();
cal.TwoDigitYearMax = maxYear;
return cal.ToFourDigitYear(year);
}
maxYear
应该是当前的四位数年份。
编辑:OP的解决方案:
static int GetFourDigitYear(int year, int pivot)
{
System.Globalization.GregorianCalendar cal =
new System.Globalization.GregorianCalendar();
cal.TwoDigitYearMax = new DateTime.Year + (100-pivot);
return cal.ToFourDigitYear(year);
}
各种系统根据其基础数据要求使用不同的断点日期。
在您的情况下,假设 00 到 09 年是 2000+ 而任何其他值(10 到 99)都是 1900+,这是最安全的
您必须问自己的问题是:您的系统中当前有 100 岁以上的人作为记录的可能性有多大。
您应该只执行一次此计算,将其存储,并使用 4 位数的年份让您的所有代码继续前进。
我会想到,如果一个人可能在 2007 年 1 月 3 日出生,那么他们在 100 年前一周的同一天出生的可能性略低于 1/7。如果这个概率对你来说太高了,那么我怀疑是否有一种自动化的好方法,除非你也存储他们的年龄。
编辑:当然,有一个公式(通过算法知道日历是如何工作的)可以降低这个概率......但最后,如果你不存储他们的年龄,你仍然可能会得到一些错误的结果。
编辑2:当然,如果你有他们的年龄,那么你不需要日历算法。