0

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

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

4

3 回答 3

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);
}
于 2009-06-26T17:22:33.190 回答
1

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

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

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

您应该只执行一次此计算,将其存储,并使用 4 位数的年份让您的所有代码继续前进。

于 2009-06-26T17:23:09.210 回答
0

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

编辑:当然,有一个公式(通过算法知道日历是如何工作的)可以降低这个概率......但最后,如果你不存储他们的年龄,你仍然可能会得到一些错误的结果。

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

于 2009-06-26T17:23:33.420 回答