Как добавить столетнюю приставку к дате рождения? - PullRequest
0 голосов
/ 19 октября 2018

Попытка выяснить, как добавить префикс столетия (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 голосов
/ 19 октября 2018

Не используйте 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);
}
0 голосов
/ 19 октября 2018

Вы можете сделать это, как (year/100)+1, но поставить {0:n0} формат для вашего .ToString("{0:n0}"), это может быть логикой, и если еще, то может остаться таким.Это должно работать в течение любого столетия, как я попробовал на калькуляторе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...