Warum einfach nicht The Round-trip ("O", "o") Format Specifier benutzen?
Das „O“ oder „o“ Standardformatbezeich stellt eine benutzerdefinierte Datums- und Uhrzeitformat-Zeichenfolge ein Muster verwenden, die Zeitzoneninformationen bewahrt und gibt ein Ergebnis Zeichenfolge, die für Datetime-Werte mit ISO 8601 erfüllt, dieses Format Der Spezifizierer wurde entwickelt, um Datums- und Uhrzeitwerte zusammen mit der DateTime.Kind -Eigenschaft im Text beizubehalten. Die formatierte Zeichenfolge kann mithilfe der Methode DateTime.Parse (String, IFormatProvider, DateTimeStyles) oder DateTime.ParseExact analysiert werden, wenn der Parameter styles auf DateTimeStyles.RoundtripKind festgelegt ist.
Der Standardformatbezeichner "O" oder "o" entspricht der benutzerdefinierten Zeichenfolge "yyyy '-' MM '-' dd'T'HH ':' mm ':' ss '.' FffffffK" für DateTime Werte und die "yyyy '-' MM '-' dd'T'HH ':' mm ':' ss '.' fffffffzzz" benutzerdefinierte Format Zeichenfolge für DateTimeOffset Werte. In dieser Zeichenfolge geben die Paare von einfachen Anführungszeichen, die einzelne Zeichen wie die Bindestriche, die Doppelpunkte und den Buchstaben "T" voneinander abgrenzen, an, dass das einzelne Zeichen ein Literal ist, das nicht geändert werden kann. Die Apostrophe erscheinen nicht in der Ausgabezeichenfolge.
Der Standardformatbezeichner O "oder" o "(und der benutzerdefinierte Formatstring" yyyy - 'MM' - 'dd'T'HH': 'mm': 'ss'. 'FffffffK ") hat einen Vorteil der drei Möglichkeiten, die ISO 8601 Zeitzoneninformationen auf die Kind-Eigenschaft der Datetime-Werte zu bewahren darstellt:
public class Example
{
public static void Main()
{
DateTime dat = new DateTime(2009, 6, 15, 13, 45, 30,
DateTimeKind.Unspecified);
Console.WriteLine("{0} ({1}) --> {0:O}", dat, dat.Kind);
DateTime uDat = new DateTime(2009, 6, 15, 13, 45, 30,
DateTimeKind.Utc);
Console.WriteLine("{0} ({1}) --> {0:O}", uDat, uDat.Kind);
DateTime lDat = new DateTime(2009, 6, 15, 13, 45, 30,
DateTimeKind.Local);
Console.WriteLine("{0} ({1}) --> {0:O}\n", lDat, lDat.Kind);
DateTimeOffset dto = new DateTimeOffset(lDat);
Console.WriteLine("{0} --> {0:O}", dto);
}
}
// The example displays the following output:
// 6/15/2009 1:45:30 PM (Unspecified) --> 2009-06-15T13:45:30.0000000
// 6/15/2009 1:45:30 PM (Utc) --> 2009-06-15T13:45:30.0000000Z
// 6/15/2009 1:45:30 PM (Local) --> 2009-06-15T13:45:30.0000000-07:00
//
// 6/15/2009 1:45:30 PM -07:00 --> 2009-06-15T13:45:30.0000000-07:00
@Downvoter: Möchten Sie uns sagen, was Sie mit dieser Antwort falsch finden? – LukeH
Dies funktionierte, aber die .ToUniversalTime() wird Ihr vorhandenes Datum durcheinander bringen, wenn es bereits in UTC ist, aber die Variable yourDateTime gibt es nicht an. Am Ende entfernte ich die .ToUniversalTime() und die Daten reihten sich dann mit dem ein, was an beiden Enden erwartet wurde (Datenbank und Webclient). –