785 Stimmen

Konvertierung einer Zeichenkette in DateTime

Wie konvertiert man eine Zeichenkette wie 2009-05-08 14:40:52,531 in eine DateTime ?

945voto

Christian C. Salvadó Punkte 763569

Da Sie mit einer 24-Stunden-Zeit arbeiten und die Sekunden durch ein Komma getrennt sind, empfehle ich Ihnen, ein benutzerdefiniertes Format anzugeben:

DateTime myDate = DateTime.ParseExact("2009-05-08 14:40:52,531", "yyyy-MM-dd HH:mm:ss,fff",
                                       System.Globalization.CultureInfo.InvariantCulture);

329voto

Sander Punkte 24565

Hierfür haben Sie grundsätzlich zwei Möglichkeiten. DateTime.Parse() y DateTime.ParseExact() .

Die erste ist sehr tolerant, was die Syntax angeht, und kann Datumsangaben in vielen verschiedenen Formaten verarbeiten. Sie ist gut für Benutzereingaben geeignet, die in verschiedenen Formaten vorliegen können.

ParseExact ermöglicht es Ihnen, das genaue Format Ihrer Datumszeichenfolge anzugeben, das für die Analyse verwendet werden soll. Dies ist sinnvoll, wenn Ihre Zeichenkette immer dasselbe Format hat. Auf diese Weise können Sie Abweichungen von den erwarteten Daten leicht erkennen.

Sie können die Benutzereingaben wie folgt analysieren:

DateTime enteredDate = DateTime.Parse(enteredString);

Wenn Sie ein bestimmtes Format für die Zeichenfolge haben, sollten Sie die andere Methode verwenden:

DateTime loadedDate = DateTime.ParseExact(loadedString, "d", null);

"d" steht für das kurze Datumsmuster (siehe MSDN für weitere Informationen ) und null gibt an, dass die aktuelle Kultur für das Parsen der Zeichenkette verwendet werden soll.

165voto

gehsekky Punkte 3097

Versuchen Sie dies

DateTime myDate = DateTime.Parse(dateString);

Ein besserer Weg wäre der folgende:

DateTime myDate;
if (!DateTime.TryParse(dateString, out myDate))
{
    // handle parse failure
}

68voto

Amir Touitou Punkte 2463

Utilisez DateTime.Parse(string) :

DateTime dateTime = DateTime.Parse(dateTimeStr);

32voto

guneysus Punkte 5747

Niemand scheint eine Erweiterungsmethode implementiert zu haben. Mit der Hilfe von @CMS's Antwort :

Ein funktionierendes und verbessertes Beispiel mit vollständigem Quelltext finden Sie hier: Gist Link

namespace ExtensionMethods {
    using System;
    using System.Globalization;

    public static class DateTimeExtensions {
        public static DateTime ToDateTime(this string s, 
                  string format = "ddMMyyyy", string cultureString = "tr-TR") {
            try {
                var r = DateTime.ParseExact(
                    s: s,
                    format: format,
                    provider: CultureInfo.GetCultureInfo(cultureString));
                return r;
            } catch (FormatException) {
                throw;
            } catch (CultureNotFoundException) {
                throw; // Given Culture is not supported culture
            }
        }

        public static DateTime ToDateTime(this string s, 
                    string format, CultureInfo culture) {
            try {
                var r = DateTime.ParseExact(s: s, format: format, 
                                        provider: culture);
                return r;
            } catch (FormatException) {
                throw;
            } catch (CultureNotFoundException) {
                throw; // Given Culture is not supported culture
            }

        }

    }
}

namespace SO {
    using ExtensionMethods;
    using System;
    using System.Globalization;

    class Program {
        static void Main(string[] args) {
            var mydate = "29021996";
            var date = mydate.ToDateTime(format: "ddMMyyyy"); // {29.02.1996 00:00:00}

            mydate = "2016 3";
            date = mydate.ToDateTime("yyyy M"); // {01.03.2016 00:00:00}

            mydate = "2016 12";
            date = mydate.ToDateTime("yyyy d"); // {12.01.2016 00:00:00}

            mydate = "2016/31/05 13:33";
            date = mydate.ToDateTime("yyyy/d/M HH:mm"); // {31.05.2016 13:33:00}

            mydate = "2016/31 Ocak";
            date = mydate.ToDateTime("yyyy/d MMMM"); // {31.01.2016 00:00:00}

            mydate = "2016/31 January";
            date = mydate.ToDateTime("yyyy/d MMMM", cultureString: "en-US"); 
            // {31.01.2016 00:00:00}

            mydate = "11//1437";
            date = mydate.ToDateTime(
                culture: CultureInfo.GetCultureInfo("ar-SA"),
                format: "dd/MMMM/yyyy"); 
         // Weird :) I supposed dd/yyyy/MMMM but that did not work !?$^&*

            System.Diagnostics.Debug.Assert(
               date.Equals(new DateTime(year: 2016, month: 5, day: 18)));
        }
    }
}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X