2008-10-12 3 views
5

Je souhaite stocker une valeur a C# DateTimeOffset dans une base de données SQL Server 2005. Sql 2008 a ceci comme un type intégré, mais pas SQL Server 2005.Stockage d'une valeur C# DateTimeOffset dans une base de données SQL Server 2005

La structure DateTimeOffset possède une valeur DateTime que je stocke en tant que DateTime, une propriété Offset (de type TimeSpan). Comme il s'agit du fuseau horaire par rapport à l'heure UTC, il est vraisemblable que ce soit un nombre entier d'heures ou de demi-heures.

Suggestions sur la meilleure façon de stocker cela dans une base de données SQL Server 2005?

+0

Question connexe - http://stackoverflow.com/questions/2532729/daylight-saving-time-and-timezone-best-practices – Oded

Répondre

7

Ce n'est pas une bonne idée de supposer qu'un décalage est un nombre d'heures ou demi-heures - il y a certainement timezones un quart d'heure environ. L'utilisation de millisecondes pour le décalage est probablement la plus flexible, mais je dirais que les minutes sont beaucoup plus faciles à lire. Si vous allez jamais regarder les données "brutes" 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.

1

magasin le datetime datetime et le décalage en millisecondes (bigint)

4

Normaliser tous les horodatages DateTimeOffset à un décalage commun, de préférence UTC. Ensuite, il suffit de stocker le DateTime comme d'habitude. Lors de l'extraction, restaurez le décalage, ce qui devrait être une constante. Cela ne conserve pas le décalage d'origine mais le décalage est quand même ambigu pour 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. C'est parce qu'un simple décalage ne peut pas représenter sans ambiguïté l'origine d'un temps. S'il vous plaît voir (le peu confus) documentation MSDN sur Choosing Between DateTime, DateTimeOffset, and TimeZoneInfo.

+0

D'accord - stockez les dates en UTC et ne vous souciez que des fuseaux horaires et des décalages d'heure d'été au moment de présentation à l'utilisateur. –

+1

Je ne suis pas d'accord. La structure DateTimeOffset (en C# et SQL 2008) stocke l'heure en heure UTC ou heure locale + décalage. Stocker un temps UTC + offset inverserait cette relation et ne ferait que créer de la confusion. –

Questions connexes