dd/mm/yyyy formatuotos eilutės konvertavimas į Datetime

Esu naujokas DotNet ir C#. Noriu konvertuoti eilutę mm/dd/yyyy formatu į DateTime objektą. Išbandžiau parsavimo funkciją, kaip nurodyta toliau, bet ji meta vykdymo klaidą.

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

Gal turite idėjų, kaip galėčiau konvertuoti ją į datatime?

Sprendimas

Reikia naudoti DateTime.ParseExact su formatu "dd/MM/yyyy"

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

Saugiau naudoti d/M/yyyy formatą, nes jis tinka ir vienaženkliams, ir dviženkliams dienos/mėnesio skaičiams. Tačiau tai iš tikrųjų priklauso nuo to, ar tikitės vienaženklės ar dviženklės reikšmės.


Jūsų datos formatas diena/mėnuo/metai gali būti priimtinas datos formatas kai kuriose kultūrose. Pavyzdžiui, Kanados kultūrai en-CA DateTime.Parse veiktų taip:

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

Arba

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

Abi pirmiau pateiktos eilutės veiktų, nes eilutės's formatas yra priimtinas en-CA kultūrai. Kadangi jūs nepateikiate jokios kultūros DateTime.Parse skambučiui, jūsų dabartinė kultūra naudojama analizavimui, kuris nepalaiko datos formato. Daugiau apie tai skaitykite DateTime.Parse.


Kitas parsavimo būdas - naudoti 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 metodų grupė .Net struktūroje nemeta išimčių dėl negaliojančių reikšmių, o grąžina bool reikšmę, nurodančią, ar parsavimas pavyko, ar ne.

Atkreipkite dėmesį, kad dienai ir mėnesiui atitinkamai naudojau viengubus d ir M. Vienaženkliai d ir M tinka tiek vienaženkliams, tiek dviženkliams dienos ir mėnesio skaičiams. Taigi formato d/M/yyyy galiojančios reikšmės gali būti:

  • "24/01/2013"
  • "24/1/2013"
  • "4/12/2013" //4 2013 m. gruodžio mėn.
  • "04/12/2013"

Daugiau informacijos rasite čia: Pasirinktinės datos ir laiko formato eilutės

Komentarai (3)

naudoti DateTime.ParseExact

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

null naudos dabartinę kultūrą, o tai šiek tiek pavojinga. Pabandykite nurodyti konkrečią kultūrą

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

Galite naudoti "dd/MM/yyyy" formatą, jei norite jį naudoti DateTime.ParseExact.

Konvertuoja nurodytą datos ir laiko eilutę į jos DateTime atitikmenį, naudojant nurodytą formatą ir kultūrai būdingą formato informaciją. Veidinio pateikimo formatas turi atitikti tiksliai atitinka nurodytą formatą.

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

Čia pateikiamas DEMO.

Daugiau informacijos rasite Custom Date and Time Format Strings.

Komentarai (0)