it-swarm.com.de

Konvertieren eines Strings in DateTime

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

532
dban

Da Sie die 24-Stunden-Zeit verarbeiten und den Sekundenbruchteil durch ein Komma trennen, empfehle ich, 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);
702
CMS

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

Die erste ist in Bezug auf die Syntax sehr nachsichtig und analysiert Daten in vielen verschiedenen Formaten. Es ist gut für Benutzereingaben, die in verschiedenen Formaten vorliegen können.

ParseExact ermöglicht es Ihnen, das genaue Format Ihrer Datumszeichenfolge für das Parsen anzugeben. Es ist gut, dies zu verwenden, wenn Ihre Zeichenfolge immer dasselbe Format hat. Auf diese Weise können Sie leicht Abweichungen von den erwarteten Daten erkennen.

Sie können Benutzereingaben folgendermaßen 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 zum Parsen der Zeichenfolge verwendet werden soll.

231
Sander

versuche dies

DateTime myDate = DateTime.Parse(dateString);

ein besserer Weg wäre:

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

benutze DateTime.Parse (string)

DateTime dateTime= DateTime.Parse(dateTimeStr);
25
Amir Twito

Niemand scheint eine Erweiterungsmethode implementiert zu haben. Mit Hilfe von @ CMSs Antwort :

Ein funktionierendes und verbessertes Beispiel für eine vollständige Quelle 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)));
        }
    }
}
25
guneysus

Versuchen Sie Folgendes: strDate ist Ihr Datum im Format "MM/TT/JJJJ"

var date = DateTime.Parse(strDate,new CultureInfo("en-US", true))
20
Krishna
19
lc.

Ich habe verschiedene Möglichkeiten ausprobiert. Was für mich funktioniert hat, war Folgendes:

Convert.ToDateTime(data, CultureInfo.InvariantCulture);

data für mich war mal so 24.09.2017 9:31:34

17
zeilja
string input;
DateTime db;
Console.WriteLine("Enter Date in this Format(YYYY-MM-DD): ");
input = Console.ReadLine();
db = Convert.ToDateTime(input);

//////// this methods convert string value to datetime
///////// in order to print date

Console.WriteLine("{0}-{1}-{2}",db.Year,db.Month,db.Day);
15
Umair Baig

Sie können auch DateTime.TryParseExact () wie folgt verwenden, wenn Sie den Eingabewert nicht kennen.

DateTime outputDateTimeValue;
if (DateTime.TryParseExact("2009-05-08 14:40:52,531", "yyyy-MM-dd HH:mm:ss,fff", System.Globalization.CultureInfo.InvariantCulture, System.Globalization.DateTimeStyles.None, out outputDateTimeValue))
{
    return outputDateTimeValue;
}
else
{
    // Handle the fact that parse did not succeed
}
14
dev.bv

DateTime.Parse

Syntax:

DateTime.Parse(String value)
DateTime.Parse(String value, IFormatProvider provider)
DateTime.Parse(String value, IFormatProvider provider, DateTypeStyles styles)

Beispiel:

string value = "1 January 2019";
CultureInfo provider = new CultureInfo("en-GB");
DateTime.Parse(value, provider, DateTimeStyles.NoCurrentDateDefault););
  • Wert: Zeichenfolgendarstellung von Datum und Uhrzeit.
  • Provider: Objekt, das kulturspezifische Informationen liefert.
  • Formatvorlagen: Formatierungsoptionen, mit denen die Zeichenfolgenanalyse für bestimmte Datums- und Uhrzeitanalysemethoden angepasst werden kann. AllowWhiteSpaces ist beispielsweise ein Wert, mit dem alle Leerzeichen in Zeichenfolgen beim Parsen ignoriert werden können.

Beachten Sie auch, dass DateTime ein Objekt ist, das intern im Framework als Zahl gespeichert ist. Format gilt nur für das Objekt, wenn Sie es zurück in einen String konvertieren.

  • Parsing Konvertieren eines Strings in den internen Nummerntyp.

  • Formatierung Konvertieren des internen numerischen Werts in eine lesbare Zeichenfolge.

Ich hatte kürzlich ein Problem, bei dem ich versucht habe, eine DateTime-Übergabe an Linq zu konvertieren. Was ich damals noch nicht erkannt hatte, war, dass das Format irrelevant ist, wenn DateTime an eine Linq-Abfrage übergeben wird.

DateTime SearchDate = DateTime.Parse(searchDate);
applicationsUsages = applicationsUsages.Where(x => DbFunctions.TruncateTime(x.dateApplicationSelected) == SearchDate.Date);

Vollständige DateTime-Dokumentation

10
Mr.B

Fügen Sie diesen Code in eine statische Klasse ein> public static class ClassName{ }

public static DateTime ToDateTime(this string datetime, char dateSpliter = '-', char timeSpliter = ':', char millisecondSpliter = ',')
{
   try
   {
      datetime = datetime.Trim();
      datetime = datetime.Replace("  ", " ");
      string[] body = datetime.Split(' ');
      string[] date = body[0].Split(dateSpliter);
      int year = date[0].ToInt();
      int month = date[1].ToInt();
      int day = date[2].ToInt();
      int hour = 0, minute = 0, second = 0, millisecond = 0;
      if (body.Length == 2)
      {
         string[] tpart = body[1].Split(millisecondSpliter);
         string[] time = tpart[0].Split(timeSpliter);
         hour = time[0].ToInt();
         minute = time[1].ToInt();
         if (time.Length == 3) second = time[2].ToInt();
         if (tpart.Length == 2) millisecond = tpart[1].ToInt();
      }
      return new DateTime(year, month, day, hour, minute, second, millisecond);
   }
   catch
   {
      return new DateTime();
   }
}

Auf diese Weise können Sie verwenden

string datetime = "2009-05-08 14:40:52,531";
DateTime dt0 = datetime.TToDateTime();

DateTime dt1 = "2009-05-08 14:40:52,531".ToDateTime();
DateTime dt5 = "2009-05-08".ToDateTime();
DateTime dt2 = "2009/05/08 14:40:52".ToDateTime('/');
DateTime dt3 = "2009/05/08 14.40".ToDateTime('/', '.');
DateTime dt4 = "2009-05-08 14:40-531".ToDateTime('-', ':', '-');
2
M.R.T2017

Verschiedene Kulturen auf der Welt schreiben Datumsstrings auf unterschiedliche Weise. In den USA ist der 20.01.2008 beispielsweise der 20. Januar 2008. In Frankreich wird dadurch eine InvalidFormatException ausgelöst. Dies liegt daran, dass in Frankreich die Datums- und Uhrzeitangaben Tag/Monat/Jahr und in den USA Monat/Tag/Jahr lauten.

Folglich wird eine Zeichenfolge wie 20/01/2008 in Frankreich bis zum 20. Januar 2008 analysiert und anschließend in den USA eine InvalidFormatException ausgelöst.

Mit System.Globalization.CultureInfo.CurrentCulture können Sie Ihre aktuellen Kultureinstellungen ermitteln.

string dateTime = "01/08/2008 14:50:50.42";  
        DateTime dt = Convert.ToDateTime(dateTime);  
        Console.WriteLine("Year: {0}, Month: {1}, Day: {2}, Hour: {3}, Minute: {4}, Second: {5}, Millisecond: {6}",  
                          dt.Year, dt.Month, dt.Day, dt.Hour, dt.Minute, dt.Second, dt.Millisecond);  
1
Saeed Dini
String now = DateTime.Now.ToString("YYYY-MM-DD HH:MI:SS");//make it datetime
DateTime.Parse(now);

dieser gibt dir

2019-08-17 11:14:49.000
0