J’ai hérité du code C # qui contient énormément de DateTimes où la propriété Kind est DateTimeKind.Unspecified. Ceux-ci sont introduits dans Datetime.ToUniversalTime (), qui renvoie une date / heure UTC (cela ajoute 7 heures dans mon cas). Voici comment ToUniversalTime () fonctionne. voir MSDN. Le problème est que ces dates sont en fait déjà dans l’heure UTC. Ils sont extraits d’une firebase database SQL Server Compact 4.0. Ils ont été stockés là-bas en UTC. Ma question principale est:
Si je pouvais répondre à une question complémentaire, ce serait:
S’il vous plaît laissez-moi savoir si je peux fournir plus de détails. Je connais cette base de code et j’y réfléchis encore. J’ai donc du mal à décrire le problème à la perfection.
Dave
Avez-vous besoin de quelque chose comme ça:
var unspecified = new DateTime(2016, 12, 12, 10, 10, 10, DateTimeKind.Unspecified); var specified = DateTime.SpecifyKind(unspecified, DateTimeKind.Utc);
À propos de la méthode SpecifyKind()
partir de MSDN :
La méthode SpecifyKind crée un nouvel object DateTime à l’aide du paramètre kind spécifié et de la valeur de l’heure d’origine.
Cela créera un nouvel object, un nouveau type et la même valeur temporelle. Vous ne pouvez pas changer le type d’object existant, vous devez en créer un avec les mêmes valeurs et un autre type.
En ce qui concerne une autre question, voici les types pris en charge dans SQL Compact . Et voici un problème concernant DateTimeOffset . On dirait que cela n’est pas encore supporté dans Sql Compact.
J’utilise une méthode d’extension:
public static DateTime SetKind(this DateTime DT, DateTimeKind DTKind) { var NewDT = New DateTime(DT.Year, DT.Month, DT.Day, DT.Hour, DT.Minute, DT.Second, DT.Millisecond, DTKind); Return NewDT; }
Cela est beaucoup moins long à utiliser dans LINQ que de devoir taper DateTime.SpecifyKind(unspecified, DateTimeKind.Utc)
chaque fois.
Par exemple:
table.Where((x) x.StartTimeStampUTC.SetKind(DateTimeKind.Utc).ToSsortingng("G") = GUIStartTimeStampTxt.Text)
Vous pouvez combiner les deux réponses ci-dessus pour une solution plus propre …
public static DateTime SetKind(this DateTime DT, DateTimeKind DTKind) { return DateTime.SpecifyKind(DT, DTKind); }