Konvertieren von DateTime vom Typ DateTimeKind.In DateTime.Kind.Utc in C # (.NET)

10

Ich habe C # -Code geerbt, der sehr viele DateTimes enthält, wobei die Kind-Eigenschaft DateTimeKind.Unspecified ist. Diese werden in Datetime.ToUniversalTime () eingegeben, was eine UTC-Datetime zurückgibt (in meinem Fall 7 Stunden). So funktioniert ToUniversalTime (); Siehe MSDN.  Das Problem ist, dass diese DateTimes tatsächlich schon in UTC-Zeit sind. Sie werden aus einer SQL Server Compact 4.0-Datenbank abgerufen. Sie wurden dort in UTC gespeichert. Meine Hauptfrage ist:

  1. Wie ändere ich die Kind-Eigenschaft einer DateTime, so dass sie UTC und nicht unspezifiziert ist? Ich möchte die Uhrzeit oder das Datum nicht ändern. So sollte beispielsweise ein Datum vom 1. April 2013, 9:05 Uhr mit seiner Kind-Eigenschaft "Nicht spezifiziert", ein Datum vom 1. April 2013, 9:05 UTC, werden.

Wenn ich eine (n) Folgefrage (n) haben könnte, wäre es:

  1. Werden Werte von Sql Server Compact unbedingt als "Nicht angegeben" zurückgegeben? In Sql Server Compact werden sie als Typ gespeichert (datetime, not null). Wenn man sich den Code anschaut, sieht es so aus, als würden sie einfach in die Datenbank eingefügt, aber es gibt keine Bestimmungen, sie als UTC oder irgendetwas zu markieren. Gibt es einen besseren Weg, mit den Dingen umzugehen? Gibt es einen glatten Weg, um sicherzustellen, dass die DateTimes aus SQL Compact als UTC herauskommen?

Bitte lassen Sie mich wissen, wenn ich mehr Details zur Verfügung stellen kann. Ich bin neu in diesem Code-Basis und immer noch mein Gehirn herum, so dass ich Probleme habe, das Problem perfekt zu beschreiben.

Dave

    
Dave 26.10.2016, 21:55
quelle

3 Antworten

12

Brauchst du vielleicht so etwas:

%Vor%

Über die Methode "SpecifyKind ()" von MSDN :

  

Die SpecifyKind-Methode erstellt ein neues DateTime-Objekt mit dem angegebenen art-Parameter und dem ursprünglichen Zeitwert.

Es wird ein neues Objekt, eine neue Art und den gleichen Zeitwert erzeugen. Sie können die Art des vorhandenen Objekts nicht ändern. Sie müssen ein neues Objekt mit denselben Werten und verschiedenen Arten erstellen.

In Bezug auf andere Frage hier sind unterstützte Typen in SQL Compact . Und hier ist das Problem bezüglich DateTimeOffset . Es sieht so aus, als ob es noch nicht in Sql Compact unterstützt wird.

    
kat1330 26.10.2016, 22:03
quelle
2

Ich verwende eine Erweiterungsmethode:

%Vor%

Dies ist viel kürzer in LINQ zu verwenden, als jedesmal DateTime.SpecifyKind(unspecified, DateTimeKind.Utc) eingeben zu müssen.

Zum Beispiel:

%Vor%     
Zach Mierzejewski 26.10.2016 22:34
quelle
0

Sie könnten die beiden obigen Antworten für eine sauberere Lösung kombinieren ...

%Vor%     
Paul Lambert 07.07.2017 13:18
quelle

Tags und Links