Perché DateTime. TryParse restituisce false quando viene fornita una stringa per l'anno reale?

StackOverflow https://stackoverflow.com/questions/1013650

  •  06-07-2019
  •  | 
  •  

Domanda

Nel codice che segue sto assegnando alla funzione una data di trasmissione = "1999" e sto cercando di convertirlo in una data x / x / 1999.

DateTime dTransactionDate = new DateTime();
if(DateTime.TryParse(sTransactionDate, out dTransactionDate))
{ //Happy 
}else
{ //Sad 
}

se la stringa è " 1999 " finirà sempre in triste. Qualche idea?

È stato utile?

Soluzione

Prova qualcosa del genere (regola CultureInfo e DateTimeStyles in modo appropriato):

DateTime.TryParseExact
  ("1999",
   "yyyy",
   CultureInfo.InvariantCulture,
   DateTimeStyles.None,
   out dTransactionDate)

Altri suggerimenti

Che ne dici di ...

DateTime dTransactionDate = new DateTime();
if (DateTime.TryParseExact(sTransactionDate, "yyyy",
    CultureInfo.InvariantCulture, DateTimeStyles.None, out dTransactionDate))
{
    // Happy
}
else
{
    // Sad
}

... o anche solo ...

DateTime dTransactionDate = new DateTime(int.Parse(sTransactionDate), 1, 1);
// Happy

" 1999 " non è un appuntamento, è un anno prova 1/1/1999

Verifica anche su un calendario di sistema che la data che stai tentando di analizzare esistesse. Proprio come troverai " 2/29/1949 " restituirà anche false perché non è mai esistito nel calendario.

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