Hinweis für die Leser: Mehrere Kommentatoren haben auf einige Probleme in dieser Antwort hingewiesen (insbesondere im Zusammenhang mit dem ersten Vorschlag). Weitere Informationen finden Sie im Kommentarbereich.
DateTime.UtcNow.ToString("yyyy-MM-ddTHH\\:mm\\:ss.fffffffzzz");
Dies gibt Ihnen ein Datum ähnlich dem 2008-09-22T13: 57: 31.2311892-04: 00 .
Ein anderer Weg ist:
DateTime.UtcNow.ToString("o");
Das gibt Ihnen 2008-09-22T14: 01: 54.9571247Z
Um das angegebene Format zu erhalten, können Sie Folgendes verwenden:
DateTime.UtcNow.ToString("yyyy-MM-ddTHH:mm:ssZ")
DateTime-Formatierungsoptionen
ToString("yyyy-MM-ddTHH:mm:ssK")
damit es funktioniert (mit dem von mir verwendeten jquery timeago-Plugin).dt.ToString("s") + dt.ToString("zzz")
// 2013-12-05T07: 19: 04-08: 00DateTime.UtcNow.ToString("s", System.Globalization.CultureInfo.InvariantCulture)
sollte Ihnen das geben, wonach Sie suchen, da der Formatbezeichner "s" als sortierbares Datums- / Zeitmuster beschrieben wird; entspricht ISO 8601.quelle
DateTime.UtcNow.ToString(CultureInfo.InvariantCulture.DateTimeFormat.SortableDateTimePattern);
Da alle diese die Zeitzone usw. ausschließen, haben Sie möglicherweise keine andere Wahl, als den expliziten Formatierer zu verwenden, dh"yyyy-MM-ddTHH:mm:ss.fffZ"
Z
sieht folgendermaßen aus:DateTime.UtcNow.ToString(c, CultureInfo.InvariantCulture)) => 2012-06-26T11:55:36
und es gibt keine Millisekundenauflösung, die sehr schön ist, da Computer eine angemessene Anzahl von Ticks pro Sekunde ausführen.o
ihr erhalten2012-06-26T11:55:36.1007668Z
Sinn36.1007668
Sekunden, also erhalten Sie Auflösung von bis zu1/10^7
einer Sekunde. Von ISO8601: 2004If a decimal fraction is included, lower order time elements (if any) shall be omitted and the decimal fraction shall be divided from the integer part by the decimal sign [...] the comma (,) or full stop (.)
"s"
macht keinen Sinn, weil: "" O "(oder" o ")," R "(oder" r ")," s "und" u ". Diese Zeichenfolgen entsprechen benutzerdefinierten Formatzeichenfolgen, die von der invarianten Kultur definiert werden. Sie erzeugen String-Darstellungen von Datums- und Zeitwerten, die kulturübergreifend identisch sein sollen. “DateTime.Now.ToString("s", new CultureInfo(myCulture))
.Gibt so etwas wie 2008-04-10T06: 30: 00 zurück
UtcNow
Gibt offensichtlich eine UTC- Zeit zurück, sodass Folgendes nicht schadet:quelle
a + b
mit demselben Zwischencode kompiliert wiestring.Concat(a, b)
(vorausgesetzt, a und b sind natürlich Zeichenfolgen), sodass es keinen Unterschied in der Leistung oder im Speicherverbrauch gibt.Verwenden:
AUSGABE
Quellen:
Standard-Datums- und Uhrzeitformatzeichenfolgen (MSDN)
Benutzerdefinierte Datums- und Zeitformatzeichenfolgen (MSDN)
quelle
string strLocalTimeAndOffset_custom = localTimeAndOffset.ToString("yyyy-MM-ddTHH:mm:ssK");
würde dazu führen:strLocalTimeAndOffset_custom: 2012-09-17T22:02:51-07:00
o
ist ein ISO-8601-Format.=>
quelle
Sie können das "Z" ( ISO 8601 UTC ) mit dem nächsten Code erhalten:
Hier ist warum:
Die ISO 8601 haben verschiedene Formate:
DateTimeKind.Local
DateTimeKind.Utc
DateTimeKind.Unspecified
.NET bietet uns eine Aufzählung mit folgenden Optionen:
Hinweis : Wenn Sie das Visual Studio 2008-Dienstprogramm "watch" auf den Teil toString ("o") anwenden, erhalten Sie möglicherweise unterschiedliche Ergebnisse. Ich weiß nicht, ob es sich um einen Fehler handelt, aber in diesem Fall erzielen Sie mit einer String-Variablen bessere Ergebnisse wenn Sie debuggen.
Quelle: Standard-Datums- und Uhrzeitformatzeichenfolgen (MSDN)
quelle
Wenn Sie DateTime nach ISO 8601 verwenden müssen, sollte ToString ("o") das liefern, wonach Sie suchen. Zum Beispiel,
DateTime + TimeZone kann jedoch andere Probleme verursachen, wie im Blogbeitrag DateTime und DateTimeOffset in .NET beschrieben: Gute Praktiken und häufige Fallstricke :
quelle
Überrascht, dass niemand es vorgeschlagen hat:
Das UniversalSortableDateTimePattern bringt Sie fast bis zu dem, was Sie wollen (was eher eine RFC 3339- Darstellung ist).
Hinzugefügt: Ich habe mich entschieden, die beantworteten Benchmarks zu verwenden https://stackoverflow.com/a/43793679/653058 angegebenen zu vergleichen.
tl: dr; es ist am teuren Ende, aber immer noch etwas mehr als eine halbe Millisekunde auf meinem beschissenen alten Laptop :-)
Implementierung:
Ergebnisse:
quelle
Ich würde nur verwenden
XmlConvert
:Die Zeitzone wird automatisch beibehalten.
quelle
Die meisten dieser Antworten haben Millisekunden / Mikrosekunden, was von ISO 8601 eindeutig nicht unterstützt wird. Die richtige Antwort wäre:
Verweise:
quelle
HINWEIS: Abhängig von der Konvertierung, die Sie an Ihrem Ende durchführen, verwenden Sie die erste Zeile (am ähnlichsten) oder die zweite.
Stellen Sie sicher, dass das Format nur zur Ortszeit angewendet wird, da "zzz" die Zeitzoneninformationen für die UTC-Konvertierung sind.
quelle
- von MSDN
quelle
.ToString("s")
?So konvertieren Sie DateTime.UtcNow in eine Zeichenfolgendarstellung von yyyy-MM-ddTHH: mm: ssZ , können Sie die ToString () -Methode der DateTime-Struktur mit einer benutzerdefinierten Formatierungszeichenfolge verwenden. Wenn Sie benutzerdefinierte Formatzeichenfolgen mit einer DateTime verwenden, ist es wichtig zu beachten, dass Sie Ihre Trennzeichen mit einfachen Anführungszeichen umgehen müssen.
Im Folgenden wird die gewünschte Zeichenfolgendarstellung zurückgegeben:
quelle
Es ist interessant, dass das benutzerdefinierte Format "JJJJ-MM-TTTHH: MM: SSK" (ohne ms) die schnellste Formatmethode ist.
Interessant ist auch, dass das "S" -Format bei Classic langsam und bei Core schnell ist ...
Natürlich sind die Zahlen sehr nahe beieinander, zwischen einigen Zeilen ist der Unterschied unbedeutend (Tests mit Suffix
_Verify
sind die gleichen wie diejenigen ohne dieses Suffix, zeigt die Wiederholbarkeit der Ergebnisse).Code:
https://github.com/dotnet/BenchmarkDotNet wurde verwendet
quelle
Mit Newtonsoft.Json können Sie dies tun
Beispiel: https://dotnetfiddle.net/O2xFSl
quelle
Wenn Sie unter SharePoint 2010 oder höher entwickeln, können Sie verwenden
quelle
.ToString("o")
oder besser verwenden$"My complicated string {dt:o}"
.Um das Format 2018-06-22T13: 04: 16 zu formatieren , das im URI einer API übergeben werden kann, verwenden Sie:
quelle
Wie in anderen Antworten erwähnt,
DateTime
gibt es Probleme mit dem Design.NodaTime
Ich schlage vor, NodaTime zum Verwalten von Datums- / Zeitwerten zu verwenden:
Formatierung
Zum Erstellen und Formatieren können
ZonedDateTime
Sie also den folgenden Codeausschnitt verwenden:Für mich
NodaTime
sieht Code ziemlich ausführlich aus. Aber Typen sind wirklich nützlich. Sie helfen dabei, Datums- / Zeitwerte korrekt zu behandeln.Newtonsoft.Json
quelle