如何在出生日期前加上世纪前缀?

时间:2018-10-19 14:03:16

标签: 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 = 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;
}

2 个答案:

答案 0 :(得分:1)

请勿使用Substring将字符串值解析为DateTime。 .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);
}

答案 1 :(得分:0)

您可以像(year/100)+1一样进行操作,但是将{0:n0}格式设置为.ToString("{0:n0}")可能是逻辑,否则就可以保持这种状态。正如我在计算器上尝试过的那样,这应该适用于任何世纪。