Konvertering av dd/mm/yyyy-formatert streng til datetime

Jeg er ny i DotNet og C#. Jeg ønsker å konvertere en streng i mm/dd/yyyy format til DateTime objekt. Jeg prøvde parse-funksjonen som nedenfor, men den kaster en kjøretidsfeil.

DateTime dt=DateTime.Parse("24/01/2013");

Noen ideer om hvordan kan jeg konvertere den til datetime?

Løsning

Du må bruke DateTime.ParseExact med formatet "dd/MM/yyyy".

DateTime dt=DateTime.ParseExact("24/01/2013", "dd/MM/yyyy", CultureInfo.InvariantCulture);

Det er sikrere hvis du bruker d/M/yyyy for formatet, siden det vil håndtere både ensifret og tosifret dag/måned. Men det avhenger egentlig av om du forventer en- eller tosifrede verdier.


Datoformatet dag/måned/år kan være et akseptabelt datoformat for noen kulturer. For eksempel for den kanadiske kulturen en-CA vil DateTime.Parse fungere som:

DateTime dt = DateTime.Parse("24/01/2013", new CultureInfo("en-CA"));

Eller

System.Threading.Thread.CurrentThread.CurrentCulture = new CultureInfo("en-CA");
DateTime dt = DateTime.Parse("24/01/2013"); //uses the current Thread's culture

Begge linjene ovenfor vil fungere fordi strengens format er akseptabelt for en-CA kultur. Siden du ikke leverer noen kultur til DateTime.Parse-kallet ditt, brukes din nåværende kultur til parsing som ikke støtter datoformatet. Les mer om dette på DateTime.Parse.


En annen metode for parsing er å bruke DateTime.TryParseExact.

DateTime dt;
if (DateTime.TryParseExact("24/01/2013", 
                            "d/M/yyyy", 
                            CultureInfo.InvariantCulture, 
                            DateTimeStyles.None,
    out dt))
{
    //valid date
}
else
{
    //invalid date
}

TryParse-gruppen av metoder i .Net-rammeverket kaster ikke unntak på ugyldige verdier, i stedet returnerer de en bool-verdi som indikerer suksess eller feil i parsing.

**Legg merke til at jeg har brukt enkelt d og M for henholdsvis dag og måned. Enkelt d og M fungerer for både enkelt/dobbeltsifret dag og måned. Så for formatet d/M/yyyy kan gyldige verdier være:

  • "24/01/2013"
  • "24/1/2013"
  • "4/12/2013" /4. desember 2013
  • "04/12/2013"

For videre lesing bør du se: Egendefinerte dato- og tidsformatstrenger.

Kommentarer (3)

bruk DateTime.ParseExact.

string strDate = "24/01/2013";
DateTime date = DateTime.ParseExact(strDate, "dd/MM/YYYY", null)

null vil bruke den gjeldende kulturen, noe som er noe farlig. Prøv å levere en spesifikk kultur

DateTime date = DateTime.ParseExact(strDate, "dd/MM/YYYY", CultureInfo.InvariantCulture)
Kommentarer (1)

Du kan bruke formatet "dd/MM/yyyy" for å bruke det i DateTime.ParseExact.

Konverterer den angitte strengrepresentasjonen av en dato og klokkeslett til dens DateTime-ekvivalent ved hjelp av det angitte formatet og kulturspesifikke formatinformasjon. Strengrepresentasjonens format må samsvare nøyaktig med det angitte formatet. det angitte formatet nøyaktig..

DateTime date = DateTime.ParseExact("24/01/2013", "dd/MM/yyyy", CultureInfo.InvariantCulture);

Her er en DEMO.

For mer informasjon, se Custom Date and Time Format Strings.

Kommentarer (0)