Question

Je souhaite stocker une valeur DateTimeOffset c # dans une base de données SQL Server 2005.

SQL 2008 a cela en tant que type intégré, mais pas SQL Server 2005.

La structure DateTimeOffset a une valeur DateTime que je stocke sous le nom DateTime, une propriété Offset (de type TimeSpan). Comme il s’agit du fuseau horaire par rapport à UTC, il est vraisemblablement généralement à un nombre entier d’heures ou de demi-heures.

Suggestions sur la meilleure manière de stocker cela dans une base de données SQL Server 2005?

Était-ce utile?

La solution

Ce n’est pas une bonne idée de supposer qu’un décalage correspond à un nombre d’heures ou de demi-heures - il existe certainement un fuseau horaire d’un quart d’heure.

L’utilisation des millisecondes pour l’offset est probablement la solution la plus flexible, mais je dirais que les minutes sont beaucoup plus faciles à lire. Si vous envisagez de consulter le " raw " Dans la base de données, il est plus facile de comprendre la valeur 60 = 1 heure que 3600000. Je ne peux pas imaginer que vous ayez vraiment besoin de fractions de minutes comme décalage.

Autres conseils

Normalisez tous les DateTimeOffsets en un décalage commun, de préférence UTC. Puis stockez simplement le DateTime comme d’habitude. Lors de l'extraction, rétablissez le décalage, qui devrait être une constante. Cela ne conserve pas l'offset d'origine, mais l'offset est ambigu par rapport à un fuseau horaire.

Si vous avez réellement besoin de connaître l'origine de la date et de l'heure, vous devez stocker des informations sur le fuseau horaire. En effet, un simple décalage ne peut pas représenter sans ambiguïté l’origine d’une heure. Consultez la documentation MSDN (quelque peu déroutante) sur Choix entre DateTime, DateTimeOffset et TimeZoneInfo .

stocke la date / heure en tant que date / heure et le décalage en tant que millisecondes (bigint)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top