Domanda

L'elaboratore della mia carta di credito richiede che invii un anno a due cifre dalla data di scadenza della carta di credito. Ecco come sto attualmente elaborando:

  1. Ho inserito un DropDownList dell'anno a 4 cifre sulla pagina.
  2. Convalido la data di scadenza in un campo DateTime per essere sicuro che la data di scadenza che viene passata al processore CC non sia scaduta.
  3. Invio un anno a due cifre al processore CC (come richiesto). Lo faccio tramite una sottostringa del valore dell'anno DDL.

Esiste un metodo per convertire un anno a quattro cifre in un anno a due cifre. Non vedo nulla sull'oggetto DateTime . O dovrei continuare a elaborarlo così com'è?

È stato utile?

Soluzione

Se stai creando un oggetto DateTime usando le date di scadenza (mese / anno), puoi usare ToString () sulla tua variabile DateTime in questo modo:

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

Modifica: fai attenzione alle tue date se usi l'oggetto DateTime durante la validazione. Se qualcuno seleziona 05/2008 come data di scadenza della sua carta, scade alla fine di maggio, non alla prima.

Altri suggerimenti

1a soluzione (più veloce):

yourDateTime.Year % 100

2a soluzione (più elegante secondo me):

yourDateTime.ToString("yy")

La risposta è già stata fornita. Ma qui voglio aggiungere qualcosa. Qualcuno ha detto che non ha funzionato.

Forse stai usando

  

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

ecco perché non funziona. Ho anche fatto lo stesso errore.

Cambialo in

  

DateTime.Now.ToString (" yy ");

Questo dovrebbe funzionare per te:

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

Non credo che ci siano elementi integrati speciali in .NET.

Aggiorna : manca qualche convalida che forse dovresti fare. Convalida della lunghezza delle variabili immesse e così via.

A questo punto, il modo più semplice è quello di troncare le ultime due cifre dell'anno. Per le carte di credito, avere una data nel passato non è necessario, quindi Y2K non ha alcun significato. Lo stesso vale se in qualche modo il tuo codice è ancora in esecuzione da oltre 90 anni.

Andrei oltre e direi che invece di utilizzare un elenco a discesa, consenti all'utente di digitare l'anno stesso. Questo è un modo comune di farlo e la maggior parte degli utenti può gestirlo.

Usa l'oggetto DateTime ToString con una stringa di formato personalizzata come myDate.ToString (" MM / dd / yy ") per esempio.

Ho visto alcuni sistemi decidere che il cutoff è 75; 75+ è 19xx e inferiore è 20xx.

//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)

Funziona per l'anno in corso. Modifica DateTime.Now.Year per farlo funzionare anche per un altro anno.

Perché il menu a discesa originale nella pagina non deve contenere solo un valore di 2 cifre? Le carte di credito coprono solo un piccolo arco di tempo, soprattutto se il fornitore CC accetta solo 2 cifre.

Ecco un link ad un articolo di 4Guys su come formattare date e orari usando il metodo ToString () passando una stringa di formato personalizzata.

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

Nel caso in cui scompaia ecco uno degli esempi.

'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")

Poiché il suo collegamento è interrotto qui c'è un collegamento alla classe DateTimeFormatInfo che rende possibili queste opzioni di formattazione.

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

Probabilmente è un po 'più coerente fare qualcosa del genere piuttosto che usare una sottostringa, ma chi lo sa.

Questo è un vecchio post, ma ho pensato di fare un esempio usando un ExtensionMethod (dal C # 3.0), poiché questo nasconderà l'implementazione e ne consentirà l'utilizzo ovunque nel progetto invece o ricreare il codice più e più volte o è necessario conoscere alcune classi di utilità.

  

I metodi di estensione ti consentono di " aggiungere " metodi per tipi esistenti   senza creare un nuovo tipo derivato, ricompilare o altrimenti   modifica del tipo originale. I metodi di estensione sono un tipo speciale di   metodo statico, ma vengono chiamati come se fossero metodi di istanza attivi   il tipo esteso. Per il codice client scritto in C # e Visual Basic,   non vi è alcuna differenza apparente tra la chiamata di un metodo di estensione   e i metodi che sono effettivamente definiti in un tipo.

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

Puoi quindi chiamare questo metodo ovunque usi un oggetto DateTime , ad esempio ...

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

La risposta è abbastanza semplice:

DateTime Today = DateTime.Today; stringa zeroBased = Today.ToString (" yy-MM-dd ");

Questo sembra funzionare bene per me. yourDateTime.ToString () substring (2);.

Anche se esistesse un modo incorporato, non lo convaliderebbe come maggiore di oggi e differirebbe molto poco da una chiamata di sottostringa. Non me ne preoccuperei.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top