Pretvarjanje oblikovanega niza dd/mm/yyyy v Datetime

Sem novinec v DotNetu in C#. Želim pretvoriti niz v formatu mm/dd/yyyy v objekt DateTime. Poskusil sem s funkcijo parse, kot je opisana spodaj, vendar se pojavi napaka med izvajanjem.

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

Ali imate kakšno idejo, kako naj ga pretvorim v datetime?

Rešitev

Uporabiti morate DateTime.ParseExact z obliko "dd/MM/yyyy"

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

Varneje je, če za format uporabite d/M/yyyy, saj bo ta oblika obdelala tako enomestne kot dvomestne številke dneva/meseca. Vendar je to odvisno od tega, ali pričakujete enomestne/dvomestne vrednosti.


Vaš format datuma dan/mesec/leto je lahko za nekatere kulture sprejemljiv format datuma. Na primer, za kanadsko kulturo en-CA bi DateTime.Parse deloval kot:

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

Ali .

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

Obe zgornji vrstici bi delovali, ker je oblika niza sprejemljiva za kulturo en-CA. Ker klicu DateTime.Parse ne posredujete nobene kulture, se za razčlenjevanje uporabi vaša trenutna kultura, ki ne podpira oblike datuma. Več o tem preberite na DateTime.Parse.


Druga metoda za razčlenjevanje je uporaba DateTime.TryParseExact

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

Skupina metod TryParse v ogrodju .Net ne vrže izjeme ob neveljavnih vrednostih, temveč vrne vrednost bool, ki označuje uspeh ali neuspeh pri razčlenjevanju.

Zaznamenite, da sem za dan in mesec uporabil enojni d in M. Enojni d in M delujeta tako za enomestne/dvomestne številke dneva in meseca. Tako so za format d/M/yyyy veljavne vrednosti:

  • "24/01/2013"
  • "24/1/2013"
  • "4/12/2013" //4 december 2013
  • "04/12/2013"

Za nadaljnje branje si oglejte: Nizi za oblikovanje datuma in časa po meri

Komentarji (3)

uporaba DateTime.ParseExact

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

null bo uporabil trenutno kulturo, kar je nekoliko nevarno. Poskusite navesti določeno kulturo

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

Uporabite lahko format "dd/MM/yyyy" za uporabo v DateTime.ParseExact.

Pretvori določeno verižno predstavitev datuma in časa v njegovo ekvivalent DateTime z uporabo določenega formata in kulturno specifičnega informacije o formatu. Oblika predstavitve vrstice se mora ujemati z točno določenim formatom.

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

Tukaj je DEMO.

Za več informacij si oglejte Način oblikovanja datumskih in časovnih nizov po meri.

Komentarji (0)