Преобразование года из 4 цифр в 2 цифры и обратно в C # - PullRequest
47 голосов
/ 22 сентября 2008

Мой процессор кредитных карт требует, чтобы я отправил двузначный год с даты истечения срока действия кредитной карты. Вот как я сейчас обрабатываю:

  1. Я поместил DropDownList четырехзначного года на странице.
  2. Я проверяю дату истечения срока действия в поле DateTime, чтобы убедиться, что дата истечения срока действия, передаваемая процессору CC, не истекла.
  3. Я посылаю двузначный год на процессор CC (по мере необходимости). Я делаю это через подстроку значения года DDL.

Есть ли способ конвертировать год с четырьмя цифрами в год с двумя цифрами. Я ничего не вижу на объекте DateTime. Или я должен продолжать обрабатывать его как есть?

Ответы [ 15 ]

84 голосов
/ 22 сентября 2008

Если вы создаете объект DateTime, используя даты истечения срока (месяц / год), вы можете использовать ToString () для вашей переменной DateTime следующим образом:

DateTime expirationDate = new DateTime(2008, 1, 31); // random date
string lastTwoDigitsOfYear = expirationDate.ToString("yy");

Редактировать: Будьте осторожны с датами, если вы используете объект DateTime во время проверки. Если кто-то выберет 05/2008 в качестве даты истечения срока действия своей карты, он истекает в конце мая, а не первого.

29 голосов
/ 21 мая 2014

1-й раствор (самый быстрый):

yourDateTime.Year % 100

2-е решение (на мой взгляд, более элегантно):

yourDateTime.ToString("yy")
6 голосов
/ 04 июня 2017

Ответ уже дан. Но здесь я хочу кое-что добавить. Кто-то сказал, что это не работает.

Может быть, вы используете

DateTime.Now.Year.ToString("yy");

, поэтому он не работает. Я тоже сделал ту же ошибку.

Измените его на

DateTime.Now.ToString("yy");

5 голосов
/ 22 сентября 2008

Это должно работать для вас:

public int Get4LetterYear(int twoLetterYear)
{
    int firstTwoDigits =
        Convert.ToInt32(DateTime.Now.Year.ToString().Substring(2, 2));
    return Get4LetterYear(twoLetterYear, firstTwoDigits);
}

public int Get4LetterYear(int twoLetterYear, int firstTwoDigits)
{
    return Convert.ToInt32(firstTwoDigits.ToString() + twoLetterYear.ToString());
}

public int Get2LetterYear(int fourLetterYear)
{
    return Convert.ToInt32(fourLetterYear.ToString().Substring(2, 2));
}

Не думаю, что в .NET есть какие-то специальные встроенные функции.

Обновление : отсутствует проверка, которую вы, возможно, должны сделать. Проверить длину введенных переменных и т. Д.

1 голос
/ 04 июня 2011
DateTime.Now.Year - (DateTime.Now.Year / 100 * 100)

Работает на текущий год. Измените DateTime.Now.Year, чтобы оно работало еще на один год.

1 голос
/ 16 апреля 2011
//using java script
var curDate = new Date();
var curYear = curDate.getFullYear();
curYear = curYear.toString().slice(2);
document.write(curYear)
//using java script
//using sqlserver
select Right(Year(getDate()),2)
//using sql server
//Using c#.net 
DateTime dt = DateTime.Now;
            string curYear = dt.Year.ToString().Substring(2,2).ToString()  ;
//using c#.net
1 голос
/ 22 сентября 2008

Я видел, как некоторые системы решают, что отсечка равна 75; 75+ - это 19xx, а ниже - 20xx.

1 голос
/ 22 сентября 2008

Используйте объект DateTime ToString со строкой пользовательского формата, например, myDate.ToString ("MM / dd / yy").

1 голос
/ 22 сентября 2008

На данный момент самый простой способ - просто усечь последние две цифры года. Для кредитных карт указывать дату в прошлом не нужно, поэтому Y2K не имеет смысла. То же самое относится к тому, если ваш код все еще работает более 90 лет.

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

0 голосов
/ 09 ноября 2018

Это, кажется, работает хорошо для меня. yourDateTime.ToString().Substring(2);

...