【问题标题】:How to add a century prefix to a birth date?如何为出生日期添加世纪前缀?
【发布时间】:2018-10-19 14:03:16
【问题描述】:

试图弄清楚如何将世纪前缀(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;
}

【问题讨论】:

标签: c# datetime logic


【解决方案1】:

不要使用Substring 将字符串值解析为日期时间。 .Net 为您创建了非常强大的方法来执行此转换。

这里我使用DateTime.TryParseExact(),它允许我指定我希望提供日期值的确切格式。该方法返回真或假,指示该值是否采用提供的格式。无需使用异常来控制逻辑流。

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

【讨论】:

    【解决方案2】:

    您可以像 (year/100)+1 一样执行此操作,但将 {0:n0} 格式设置为您的 .ToString("{0:n0}") 这可能是逻辑,如果其他情况,它可以保持这样。当我尝试使用计算器时,这应该适用于任何世纪。

    【讨论】:

    • 感谢您的回复!!但是我怎样才能用这个公式确定中心前缀呢?那只会给 meL (87 / 100) + 1 = 1,87
    猜你喜欢
    • 1970-01-01
    • 2021-08-11
    • 1970-01-01
    • 2014-11-19
    • 2017-11-14
    • 1970-01-01
    • 1970-01-01
    • 2019-09-08
    相关资源
    最近更新 更多