Domanda

Voglio archiviare un valore DateTimeOffset c # in un database SQL Server 2005.

Sql 2008 ha questo come tipo incorporato, ma SQL Server 2005 no.

La struttura DateTimeOffset ha un valore DateTime che memorizzo come DateTime, una proprietà Offset (di tipo TimeSpan). Dal momento che questo è il fuso orario relativo all'ora UTC, presumibilmente è usualmente per un numero intero di ore o mezz'ora.

Suggerimenti su come archiviarlo al meglio in un database di SQL Server 2005?

È stato utile?

Soluzione

Non è una buona idea supporre che un offset sia un numero di ore o mezz'ora - ci sono sicuramente fusi orari di un quarto d'ora in giro.

L'uso dei millisecondi per l'offset è probabilmente il più flessibile, ma direi che i minuti sono molto più facili da leggere. Se hai mai intenzione di dare un'occhiata a " raw " dati nel database, è più facile capire il valore 60 = 1 ora rispetto a 3600000. Non riesco a immaginare che tu abbia davvero bisogno di frazioni di minuti come offset.

Altri suggerimenti

Normalizza tutti gli DateTimeOffset su un offset comune, preferibilmente UTC. Quindi archiviare DateTime come al solito. Al momento dell'estrazione ripristinare l'offset, che dovrebbe essere una costante. Questo non mantiene lo scostamento di origine ma lo scostamento è comunque ambiguo a un fuso orario.

Se in realtà è necessario conoscere l'origine della data / ora, è necessario memorizzare alcune informazioni sul fuso orario. Questo perché un semplice offset non può rappresentare in modo inequivocabile l'origine di un tempo. Consultare la documentazione (piuttosto confusa) di MSDN su Scelta tra DateTime, DateTimeOffset e TimeZoneInfo .

archivia il datetime come datetime e l'offset come millisecondi (bigint)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top