Преобразовать год из двух цифр в год из четырех цифр - PullRequest
28 голосов
/ 08 января 2010

Это вопрос лучших практик. У меня есть утилита, которая принимает двухзначный год в виде строки, и мне нужно преобразовать ее в четырехзначный год в виде строки. сейчас я делаю

//DOB's format is "MMM (D)D YY" that first digit of the day is not there for numbers 1-9
string tmpYear = rowIn.DOB.Substring(rowIn.DOB.Length - 3, 2); //-3 because it is 0 indexed
if (Convert.ToInt16(tmpYear) > 50)
    tmpYear = String.Format("19{0}", tmpYear);
else
    tmpYear = String.Format("20{0}", tmpYear);

Я уверен, что делаю это ужасно неправильно, какие-нибудь указатели?

Ответы [ 16 ]

0 голосов
/ 22 ноября 2016

Чтобы изменить 2-значный год на 4-значный текущий или ранее -

year = year + (DateTime.Today.Year - DateTime.Today.Year%100);
if (year > DateTime.Today.Year)
                year = year - 100;
0 голосов
/ 09 февраля 2015

Если вы рассчитываете на человека, ему, вероятно, не будет более 100 лет ...

Например: 751212

var nr = "751212";
var century = DateTime.Now.AddYears(-100).Year.ToString().Substring(0, 2);

var days = (DateTime.Now - DateTime.Parse(century + nr)).Days;
decimal years = days / 365.25m;
if(years>=99)
 century = DateTime.Now.Year.ToString().Substring(0, 2);

var fullnr = century+nr;
0 голосов
/ 11 июля 2013

Мой ответ не будет соответствовать вашему вопросу, но для кредитных карт я просто добавлю 2 цифры текущего года

    private int UpconvertTwoDigitYearToFour(int yearTwoOrFour)
    {
        try
        {
            if (yearTwoOrFour.ToString().Length <= 2)
            {
                DateTime yearOnly = DateTime.ParseExact(yearTwoOrFour.ToString("D2"), "yy", null);
                return yearOnly.Year;
            }
        }
        catch
        {
        }

        return yearTwoOrFour;
    }
0 голосов
/ 29 марта 2012

У меня была похожая проблема, и она возникла ... HTH!

value = this.GetDate()

if (value.Length >= 6)//ensure that the date is mmddyy
{
    int year = 0;

    if (int.TryParse(value.Substring(4, 2), out year))
    {
        int pastMillenium = int.Parse(DateTime.Now.ToString("yyyy").Substring(0, 2)) - 1;

        if (year > int.Parse(DateTime.Now.ToString("yy")))//if its a future year it's most likely 19XX
        {
            value = string.Format("{0}{1}{2}", value.Substring(0, 4), pastMillenium, year.ToString().PadLeft(2, '0'));
        }
        else
        {
            value = string.Format("{0}{1}{2}", value.Substring(0, 4), pastMillenium + 1, year.ToString().PadLeft(2, '0'));
        }
    }
    else
    {
        value = string.Empty;
    }
}
else
{
    value = string.Empty;
}
0 голосов
/ 01 декабря 2011

Попробуйте этот простой код

// Вызов метода TextBoxDateFormat с датой в качестве параметра.

Метод

public void TextBoxDateFormat(string str1)

{

// Takes the current date format if MM/DD/YY or MM/DD/YYYY

DateTime dt = Convert.ToDateTime(str1);

//Converts the requested date into MM/DD/YYYY and assign it to textbox field

TextBox = String.Format("{0:MM/dd/yyyy}", dt.ToShortDateString());


//include your validation code if required

}
0 голосов
/ 08 января 2010

Из любопытства, откуда вы берете эти данные? Из формы? В таком случае; Я просто попросил бы пользователя заполнить (или каким-либо образом выбрать) год четырьмя цифрами или получить возраст пользователя и месяц / день рождения, и использовать эти данные, чтобы выяснить, в каком году они родились. Таким образом, вам не придется беспокоиться об этой проблеме вообще:)

Редактировать: Использовать DateTime для работы с данными такого типа.

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