Wie konvertiert man eine Zeichenkette wie 2009-05-08 14:40:52,531
in eine DateTime
?
Antworten
Zu viele Anzeigen?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.
Utilisez DateTime.Parse(string)
:
DateTime dateTime = DateTime.Parse(dateTimeStr);
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)));
}
}
}
- See previous answers
- Weitere Antworten anzeigen