DateTimeOffset de type DateTime de conversion - la Perte de Données
Quand je convertir un datetimeoffset en valeur datetime, est-il une possibilité de perte de données.
Partir de la documentation MSDN, la conversion de datetimeoffset de type datetime est mentionné comme suit:
DateTime propriété est le plus couramment utilisé pour effectuer DateTimeOffset
DateTime de conversion. Toutefois, elle renvoie une valeur de type DateTime dont le
Type de propriété n'est pas spécifiée. Cela signifie que toute l'information sur
la valeur DateTimeOffset de la relation à l'UTC est perdu par le
conversion lors de l'DateTime propriété est utilisée.
Pour indiquer qu'un converti valeur de type DateTime est l'heure UTC, vous pouvez récupérer la valeur de la DateTimeOffset.UtcDateTime de la propriété. Elle diffère de la date de la propriété de deux façons:
Elle renvoie une valeur de type DateTime dont le Type de la propriété est Utc.
Si le Décalage de la valeur de la propriété n'est pas égale à Temps.Zéro, il convertit l'heure UTC.
Je vois la méthode suivante pour convertir datetime décalage datetime:
static DateTime ConvertFromDateTimeOffset(DateTimeOffset dateTime)
{
if (dateTime.Offset.Equals(TimeSpan.Zero))
return dateTime.UtcDateTime;
else if (dateTime.Offset.Equals(TimeZoneInfo.Local.GetUtcOffset(dateTime.DateTime)))
return DateTime.SpecifyKind(dateTime.DateTime, DateTimeKind.Local);
else
return dateTime.DateTime;
}
Maintenant, dans notre système, nous sommes en conversion datetimeoffset de type datetime dans la façon décrite ci-dessus. Plus tard, nous voulons convertir la date de retour à datetimeoffset.
Comme un exemple:
DateTime dt = ConvertFromDateTimeOffset(datetimeOffset);
DateTimeOffset dofsetnew = new DateTimeOffset(dt);
Ma question est de savoir si, en toutes circonstances datetimeOffset et dofsetnew être différent ? Si oui, alors la conversion serait la perte de données.
Vous devez vous connecter pour publier un commentaire.
La façon dont il est écrit - Oui, à tout moment de l'entrée DateTimeOffset est à un décalage UTC c'est une valeur autre que 0 et votre fuseau horaire local (la dernière 'else' état). À mon humble avis, vous êtes mieux de simplement en utilisant toujours UtcDateTime, en supposant que le potentiel fuseau horaire de conversion impliqués, il est acceptable.
Aussi, si votre fuseau horaire local observe l'heure d'été, alors il y a perte au cours de l'ambigu-heure chaque année, puisque vous ne savez pas de qui il représente.
Si vous avez besoin pour vous assurer qu'il n'y a aucune perte, ne convertissez pas DateTime et de rester avec DateTimeOffset (sql serveur, tapez 'datetimeoffset') ou si vous devez, garder le décalage UTC comme une valeur distincte que vous passez avec elle, de sorte que vous pouvez alors reconstituer la DateTimeOffset avec les 2 valeurs (DateTime et offset).