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

.net 处理Y2K日期转换的首选方法?,.net,datetime,y2k,2-digit-year,.net,Datetime,Y2k,2 Digit Year,是否有将2位数年份转换为4位数年份的首选算法 我有一个两位数的出生日期(以及月份和日期),我想将其转换为C#DateTime。显然,出生日期不可能在将来,但是.NET中是否有一个现有的工具可以将2位数的年份转换为4位数的年份 static int GetFourDigitYear(int year, int maxYear) { System.Globalization.GregorianCalendar cal = new System.Globalizatio

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

我有一个两位数的出生日期(以及月份和日期),我想将其转换为C#
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);
}
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位数的年份前进。

不同的系统根据其基础数据要求使用不同的断点日期

在您的情况下,最有可能安全地假设00到09年是2000+年,而任何其他值(10到99)是1900年+

你必须问自己的问题是:在你的系统中,有100岁以上的老人作为记录的可能性有多大


你应该准确地计算一次,存储它,然后使用4位数的年份将所有代码向前推进。

我会想到,如果一个人可能在2007年1月3日出生,那么他们在100年前一周的同一天出生的可能性略低于1/7。如果这个概率太高,你不喜欢,那么我怀疑是否有一个好的方法来自动化,除非你也存储他们的年龄

编辑:当然,有一个公式(从算法上知道日历是如何工作的)可以降低这种可能性。。。但最终,如果你不储存他们的年龄,你仍然可能会有一些错误的结果


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

我会想到,如果一个人可能在2007年1月3日出生,那么他们在100年前一周的同一天出生的可能性略低于1/7。如果这个概率太高,你不喜欢,那么我怀疑是否有一个好的方法来自动化,除非你也存储他们的年龄

编辑:当然,有一个公式(从算法上知道日历是如何工作的)可以降低这种可能性。。。但最终,如果你不储存他们的年龄,你仍然可能会有一些错误的结果


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

如果你没有注意到的话,你大概晚了九年。不是每个我要谈的系统都能兼容Y2K。并不是每一个系统都能兼容Y2K。如果你没有注意到的话,你已经晚了大约九年。不是每一个我要谈的系统都能兼容Y2K。并不是每个系统都会符合Y2K。作为旁注,此链接()列出了2001年至2100年可能会导致各种系统出现问题的日期。作为旁注,此链接()有一个从2001年到2100年可能导致各种系统出现问题的潜在日期列表。类似于此的静态函数最终成为我的解决方案,只是我通过了一个枢轴,而不是一年。对于出生日期,轴是100年前的。类似于此的静态函数最终成为我的解决方案,只是我传递轴,而不是一年。对于出生日期,轴心是100年前。