处理Y2K日期转换的首选方法?

时间:2009-06-26 17:18:22

标签: .net datetime y2k 2-digit-year

是否有将2位数年份转换为4位数年份的首选算法?

我有一个2位数的出生日期(以及月和日)我想要转换为C#DateTime。很明显,生日不可能在未来,但是.NET中是否有现有设施将2位数年份转换为4位数年份?

3 个答案:

答案 0 :(得分:2)

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);
}

答案 1 :(得分:1)

各种系统根据其基本数据要求使用不同的断点日期。

在您的情况下,假设00到09年是2000+而其他任何值(10到99)都是1900 +

,这很可能是安全的。

您必须问自己的问题是:将100岁以上的人作为您系统中当前记录的可能性是多少。

您应该只进行一次计算,存储它,并使用4位数年份将所有代码保存。

答案 2 :(得分:0)

对我来说,如果一个人在2007年1月3日出生,那么他们在100年前的同一天出生的可能性就会略低于1/7。如果这个概率对你来说太高了,那么我怀疑除非你也存储它们的年龄,否则有一种很好的自动化方法。

编辑:当然,有一个公式(通过算法了解日历如何工作)会降低这种可能性......但最后,如果你不存储他们的话,你仍然可能会有一些错误的结果年龄。

编辑2:当然,如果你有他们的年龄,那么你不需要日历算法。