Pergunta

O meu cartão de crédito processador requer I enviar um ano de dois dígitos a partir da data de expiração do cartão de crédito. Aqui está como eu estou processando atualmente:

  1. Eu coloquei um DropDownList do ano de 4 dígitos na página.
  2. I validar a data de validade em um campo DateTime ter certeza de que a data de expiração de ser passado para o processador CC não expirou.
  3. I enviar um ano de dois dígitos para o processador CC (conforme necessário). Eu faço isso através de uma substring do valor do DDL ano.

Existe um método lá fora para converter um ano de quatro dígitos para um ano de dois dígitos. Não estou vendo nada no objeto DateTime. Ou devo apenas continuar processando-o como eu sou?

Foi útil?

Solução

Se você estiver criando um objeto DateTime usando as datas de validade (mês / ano), você pode usar ToString () em sua variável DateTime assim:

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

Edit: Tenha cuidado com as datas que se você usar o objeto DateTime durante a validação. Se seleciona alguém 05/2008 como data de validade do seu cartão, que expira no final de Maio, não no primeiro.

Outras dicas

1ª solução (mais rápido):

yourDateTime.Year % 100

2ª solução (mais elegante na minha opinião):

yourDateTime.ToString("yy")

A resposta já está dada. Mas aqui eu quero acrescentar algo. Alguma pessoa disse que não funcionou.

Pode ser que você está usando

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

é por isso que não está funcionando. Eu também fiz o mesmo erro.

Mude-o para

DateTime.Now.ToString("yy");

Isso deve funcionar para você:

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

Eu não acho que há qualquer especial built-in coisas na NET.

Atualizar : Está faltando alguma validação que você talvez deveria fazer. comprimento Validar de variáveis ??inseridos, e assim por diante.

Neste ponto, a maneira mais simples é apenas para truncar os dois últimos dígitos do ano. Para cartões de crédito, tendo uma data no passado é desnecessário tão Y2K não tem significado. O mesmo se aplica se de alguma forma o seu código ainda está em execução em mais de 90 anos.

Eu iria mais longe e dizer que em vez de usar uma lista suspensa, deixe o tipo de usuário no-se ano. Esta é uma forma comum de fazê-lo ea maioria dos usuários pode lidar com isso.

Use o objeto ToString DateTime com um formato personalizado como myDate.ToString ( "MM / dd / aa"), por exemplo.

Eu vi alguns sistemas decidir que o corte é de 75; 75+ é 19xx e 20xx abaixo é.

//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
DateTime.Now.Year - (DateTime.Now.Year / 100 * 100)

Funciona para o ano atual. Mudança DateTime.Now.Year para torná-lo também trabalham por mais um ano.

Por que não ter a queda original voltado para baixo na página de ser apenas um valor de 2 dígitos? cartões de crédito cobrem apenas uma pequena extensão ao olhar para o ano, especialmente se o fornecedor CC leva apenas em 2 dígitos já.

Aqui está um link para um artigo 4Guys sobre como você pode formatar datas e horas usando o método ToString () passando um formato personalizado.

http://www.aspfaqs.com/aspfaqs/ShowFAQ.asp ? FAQID = 181

Apenas no caso de que ele vai embora aqui é um dos exemplos.

'Create a var. named rightNow and set it to the current date/time
Dim rightNow as DateTime = DateTime.Now
Dim s as String 'create a string

s = rightNow.ToString("MMM dd, yyyy")

Desde a sua ligação é interrompida aqui está um link para a classe DateTimeFormatInfo que faz com que essas opções de formatação possível.

http://msdn.microsoft.com/en -us / library / system.globalization.datetimeformatinfo.aspx

É provavelmente um pouco mais consistente para fazer algo assim em vez de usar um substring, mas quem sabe.

Este é um post antigo, mas eu pensei que eu ia dar um exemplo usando um ExtensionMethod (desde C # 3.0), uma vez que este irá esconder a implementação e permitir o uso em todo o projeto em vez ou recriar o código mais e mais ou a necessidade de estar ciente de alguns classe de utilitário.

Os métodos de extensão permitem que você "adicione" métodos para tipos existentes sem a criação de um novo tipo de derivados, a recompilação, ou de outra maneira modificar o tipo original. Os métodos de extensão são um tipo especial de método estático, mas eles são chamados como se fossem métodos de instância sobre do tipo prolongado. Para código de cliente escrito em C # e Visual Basic, não há diferença aparente entre chamar um método de extensão e os métodos que são realmente definidos em um tipo.

public static class DateTimeExtensions
    {
        public static int ToYearLastTwoDigit(this DateTime date)
        {
            var temp = date.ToString("yy");
            return int.Parse(temp);
        }
    }

Você pode, em seguida, chamar esse método em qualquer lugar você usa um objeto DateTime, por exemplo ...

var dateTime = new DateTime(2015, 06, 19);
var year = cob.ToYearLastTwoDigit();

A resposta é muito simples:

DateTime Hoje = DateTime.Today; cadeia zeroBased = Today.ToString ( "AA-MM-dd");

Isso parece funcionar bem para mim. yourDateTime.ToString().Substring(2);

Mesmo se uma forma embutida existisse, seria não validá-lo como maior do que hoje e seria diferem muito pouco de uma chamada substring. Eu não me preocuparia com isso.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top