J'ai hérité du code C # qui a énormément de DateTimes où la propriété Kind est DateTimeKind.Unspecified. Ceux-ci sont introduits dans Datetime.ToUniversalTime () qui donne un datetime UTC (cela ajoute 7 heures dans mon cas). Voici comment fonctionne ToUniversalTime (); voir MSDN. Le problème est que ces DateTimes sont en fait déjà en heure UTC. Ils sont extraits d'une base de données SQL Server Compact 4.0. Ils y étaient stockés à UTC. Ma principale question est:
Si je pouvais me permettre une ou des questions complémentaires, ce serait:
Veuillez me faire savoir si je peux fournir plus de détails. Je suis nouveau dans cette base de code et j'y parviens toujours, donc j'ai du mal à décrire le problème parfaitement.
Dave
Avez-vous peut-être 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()
de MSDN :
La méthode SpecifyKind crée un nouvel objet DateTime à l'aide du paramètre kind spécifié et de la valeur d'heure d'origine.
Il créera un nouvel objet, un nouveau type et une même valeur de temps. Vous ne pouvez pas changer le type d'objet existant, vous devez en créer un nouveau avec les mêmes valeurs et un type différent.
En ce qui concerne les autres questions, voici les types pris en charge dans SQL Compact . Et voici le problème concernant DateTimeOffset . Il semble que ce ne soit pas encore pris en charge 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;
}
C'est beaucoup plus court à utiliser dans LINQ que d'avoir à taper DateTime.SpecifyKind(unspecified, DateTimeKind.Utc)
à chaque fois.
Par exemple:
table.Where((x) x.StartTimeStampUTC.SetKind(DateTimeKind.Utc).ToString("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);
}