C# 如何将世纪前缀添加到出生日期?

C# 如何将世纪前缀添加到出生日期?,c#,datetime,logic,C#,Datetime,Logic,试图找出如何在出生日期中添加世纪前缀(19或20)。有人知道如何用更好的方式写这篇文章吗 public string GetCenturyPrefix(string socSecNo) { string prefix = string.Empty; try { var currentDate = DateTime.Now; var birthDayTemp = socSecNo.Substring(0, 6); var yy

试图找出如何在出生日期中添加世纪前缀(19或20)。有人知道如何用更好的方式写这篇文章吗

public string GetCenturyPrefix(string socSecNo)
{
    string prefix = string.Empty;
    try
    {
        var currentDate = DateTime.Now;
        var birthDayTemp = socSecNo.Substring(0, 6);
        var yy = birthDayTemp.Substring(0, 2);
        var mm = birthDayTemp.Substring(2, 2);
        var dd = birthDayTemp.Substring(4, 2);
        birthDayTemp = yy + "-" + mm + "-" + dd;
        var birthDay = Convert.ToDateTime(birthDayTemp);
        var totalDays = currentDate - birthDay;
        var age = totalDays.TotalDays / 365;
        var yearsAfter2000 = Convert.ToInt32(currentDate.Year.ToString().Substring(2, 2));
        if (age > yearsAfter2000)
        {
            prefix = "19";
        }
        else
        {
            prefix = "20";
        }
    }
    catch (Exception)
    {
    }
    return prefix;
}

你可以像
(year/100)+1那样做,但是把
{0:n0}
格式放在你的
.ToString({0:n0}”)
中,这可能是逻辑,如果不是,它可以保持这样。这应该适用于任何世纪,就像我在计算器上尝试的那样。

不要使用
子字符串
将字符串值解析为日期时间。Net为您创建了非常健壮的方法来进行此转换

这里我使用的是
DateTime.TryParseExact()
,它允许我指定希望以何种格式提供日期值。该方法返回true或false,指示值是否为提供的格式。不需要使用异常来控制逻辑流

public string GetCenturyPrefix(string socSecNo)
{
    // Check if you're able to parse the incoming value
    // in the format "yyMMdd".
    if (!DateTime.TryParseExact(socSecNo, "yyMMdd", CultureInfo.InvariantCulture, 
        DateTimeStyles.None, out DateTime parsedDateTime))
    {
        // Do something if the input can't be parsed in that format.
        // In this example I'm throwing an exception, but you can also
        // return an empty string.
        throw new Exception("Not valid date format");
    }

    // Extract only the Year portion as a 4 digit string,
    // and return the first 2 characters.
    return parsedDateTime.ToString("yyyy").Substring(0, 2);
}

为什么要
子字符串
-ing字符串以获取日期组件?为什么不直接使用
DateTime.Parse(socSecNo)
.ParseExact(..)
?这段代码有效吗?如果是这样的话,这可能是一个更好的问题,但你应该阅读并确保你对你的整个代码持开放态度
birth.Year>=2000
?请回顾一个最著名/相关的C#问题,谢谢你的回复!!但是我如何用这个公式确定centry前缀呢?这只会给出meL(87/100)+1=1,87