Omzetten van dd/mm/jjjj geformatteerde string naar Datetime

Ik ben nieuw met DotNet en C#. Ik wil een string in mm/dd/yyyy formaat omzetten naar een DateTime object. Ik heb de parse functie geprobeerd zoals hieronder, maar het geeft een runtime error.

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

Iemand een idee hoe ik het kan omzetten naar datetime?

Oplossing

U moet gebruik maken van DateTime.ParseExact met formaat "dd/MM/yyyy"

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

Het is veiliger om d/M/yyyy te gebruiken voor het formaat, omdat dat zowel enkelcijferige als dubbelcijferige dagen/maanden aankan. Maar dat hangt er echt van af of je enkel- of dubbelcijferige waarden verwacht.


Uw datum formaat dag/Maand/Jaar kan een acceptabel datum formaat zijn voor sommige culturen. Bijvoorbeeld voor de Canadese cultuur en-CA DateTime.Parse zou werken als:

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

Of

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

Beide bovenstaande regels zouden werken omdat het formaat van de string's acceptabel is voor de en-CA cultuur. Omdat je geen cultuur aan je DateTime.Parse aanroep meegeeft, wordt je huidige cultuur gebruikt voor parsing die'het datum formaat niet ondersteunt. Lees meer hierover bij DateTime.Parse.


Een andere methode voor parsing is het gebruik van DateTime.TryParseExact

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

De TryParse groep van methoden in .Net framework gooit geen exception op ongeldige waarden, in plaats daarvan geven ze een bool waarde terug die succes of falen bij het parsen aangeeft.

Merk op dat ik enkele d en M heb gebruikt voor respectievelijk dag en maand. Enkele d en M werken voor zowel enkele als dubbele cijfers voor dag en maand. Dus voor het formaat d/M/jjjj kunnen geldige waarden zijn:

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

Voor verdere lectuur zou u moeten zien: Aangepaste datum en tijd formaat Strings

Commentaren (3)

gebruik DateTime.ParseExact

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

null zal de huidige cultuur gebruiken, wat enigszins gevaarlijk is. Probeer een specifieke cultuur op te geven

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

U kunt het "dd/MM/yyyy" formaat gebruiken in DateTime.ParseExact.

Converteert de opgegeven string representatie van een datum en tijd naar zijn DateTime-equivalent met behulp van het opgegeven formaat en cultuurspecifieke formaatinformatie. De opmaak van de string-weergave moet precies overeenkomen met de opgegeven opmaak exact overeenkomen.

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

Hier is een DEMO.

Voor meer informatie, kijk op Custom Date and Time Format Strings

Commentaren (0)