2017-03-31 7 views
3

Wenn die .ParseExact() -Methode für die Datum- und ich bekomme immer die gleiche Ausgabe wie die String-i in setzen Hier ist mein Code:.DateTime.ParseExact nicht tun, was ich will es tun

[Authorize(Roles = "Backoffice, Manager")] 
    [HttpPost] 
    public ActionResult FilmShowCreate(FilmShowViewModel newFilmShow) 
    { 
     if (ModelState.IsValidField("FilmId") && ModelState.IsValidField("Time")) 
     { 
      DateTime unformattedDateTime = newFilmShow.Date.Date + newFilmShow.Time.TimeOfDay; 
      string dateString = unformattedDateTime.ToString("yyyy-MM-dd HH:mm:ss"); 
      DateTime dbDate = DateTime.ParseExact(dateString, "yyyy-MM-dd HH:mm:ss", 
       CultureInfo.GetCultureInfo("en-US"), DateTimeStyles.AdjustToUniversal); 

      FilmShow filmShow = new FilmShow 
      { 
        Film = filmRepository.GetFilm(newFilmShow.FilmId), 
        Cinema = cinemaRepository.GetCinema(newFilmShow.CinemaId), 
        ThreeDimensional = newFilmShow.ThreeDimensional, 
        Date = dbDate, 
        SpecialEvent = newFilmShow.SpecialEvent 
      }; 

      filmShowsRepository.AddShow(filmShow); 

      return View("SuccesfullFilmShowCreate"); 

Die Zeichenfolge dateString ist gut formatiert, aber es ist eine Zeichenfolge, und ich muss es in der Datenbank als Format DateTime wie diese "Jahr-Monat-Tag Stunden: Minuten: Sekunden" speichern. Aber aus irgendeinem Grund scheint der ParseExact in meinem Fall nicht zu funktionieren. Das DateTime Format, das ich bekomme, ist "TT-MM-JJJJ HH: mm".

Antwort

3

Es tut nicht was Sie wollen, weil, nun, diese Funktion ist nicht angenommen zu tun, was Sie beschreiben.

ParseExact zeigt einfach an, dass der Eingang mit dem angegebenen Format übereinstimmen muss, damit es verwendet werden kann (und keine Ausnahme auslöst). Es ist ein Gegenstück zu Parse, die ein beliebiges gültiges Datum/Uhrzeit-Format akzeptiert. Es hat absolut keine Auswirkungen auf das zukünftige Format einer String-Repräsentation des DateTime Objekts, das es erstellt.

Wenn Sie ausgeben möchten es in einem bestimmten Format, Ihr Format-String in ToString passieren, bevor die Zeichenfolge an die Datenbank senden. Natürlich, wenn Sie etwas wie EF verwenden, ist die Konvertierung für Sie getan und es sollte keine Rolle spielen.

Beispiel:

string myFormattedDateTime = dbDate.ToString("yyyy-MM-dd HH:mm:ss"); 

Lesen Ihre Frage genauer, wird mir klar, dass Sie scheinen zu glauben, dass Datetime einige „gespeichert“ Format hat. Es tut nicht. DateTime ist nur eine Sammlung von Zahlen, die die Informationen enthalten, die zur Darstellung eines Datums und einer Uhrzeit benötigt werden. Das Format, das Sie beschreiben nur existiert in String-Darstellungen.

+0

Hallo, vielen Dank für Ihre Antwort! Ich verstehe deine Geschichte, aber sie löst mein eigentliches Problem nicht wirklich. Wenn ich eine Seed-Methode bei der Migration verwende, füge ich eine Datetime wie folgt hinzu: Date = new DateTime (2017, 03, 08, 14, 00, 00), was zu einem Datum führt, das 2017-03-08 14:00:00 ist ist was ich will, aber wenn ich eine Datetime mit meinem Repository hinzufügen, bekomme ich das folgende Format 2017-08-03 14:00:00 welches der Tag und Monat umgeschaltet ist. Ich weiß wirklich nicht, was das verursacht, aber es ist wirklich frustrierend. –

+0

@NickBurggraaff Entschuldigung, ich denke, du wirst ein bisschen mehr Debugging an deinem Ende brauchen. Seien Sie versichert, dass 'ParseExact' nicht Ihr Problem ist. – BradleyDotNET

+0

Danke für Ihre Hilfe trotzdem! Das Problem wurde behoben, indem der Tag dem Monat und der Monat dem Tag zugewiesen wurde. Nicht eine sehr saubere Lösung, aber es funktioniert ... Das ist wichtig. –