2009-02-25 7 views
1

Juste avant d'enregistrer un DateTime dans la base de données, je suis en train de convertir un DateTime en OracleTimeStampTZ. Cela convertit le DateTime dans un OracleTimeStampTZ dans le fuseau horaire actuel, ce qui est cool, c'est ce que je veux. Sauf que le fuseau horaire est représenté comme un ensemble de temps libre (+13, puisque je suis en Nouvelle-Zélande).Conversion de DateTime en OracleTimeStampTZ

Maintenant, j'ai un peu peur que cela va me mordre dans le cul en ce qui concerne l'heure d'été. Je préfère que le OracleTimeStampTZ.TimeZone soit représenté comme un fuseau horaire nommé (et donc un fuseau horaire nommé dans la base de données). Par souci de cohérence, je veux utiliser un fuseau horaire comme déterminé par .NET (IE en utilisant TimeZoneInfo.Local).

Le problème est que TimeZoneInfo ne semble pas contenir de nom de fuseau horaire correspondant aux noms de fuseau horaire d'Oracle. En outre, la propriété OracleTimeStampTZ.TimeZone est en lecture seule.

Quelqu'un sait-il comment s'y prendre?

Merci à l'avance

EDIT == expliquant mes inquiétudes au sujet de l'heure d'été ==

OK, ce que je suis inquiet au sujet est la suivante: Dire que je sauve une date en ce moment dans la base de données pour un événement qui doit se produire dans un an et demi à partir de maintenant (de l'autre côté de l'heure d'été de toute façon).

Dites la date/heure que je sauvegarde est 16:00 +13. Lorsque nous arrivons à l'autre côté de l'heure d'été, le décalage dans mon pays peut être de +12, ce qui signifie que dans mon fuseau horaire local, la date que j'ai précédemment enregistrée est considérée comme 15:00, car mon décalage a changé. D'après ce que je comprends, si le fuseau horaire nommé est stocké, alors quand nous venons d'évaluer la date de l'autre côté de l'heure d'été, nous pouvons déterminer le décalage correct à utiliser selon qu'il est DST ou non.

Est-ce que ce que j'ai décrit est correct?

+0

Bien sûr, je serais tout aussi heureux si je pouvais faire la distribution par défaut de DateTime à OracleTimeStampTZ utiliser le fuseau horaire nommé. – tobyc

Répondre

0

Je pense que vous êtes probablement OK tel quel. Pouvez-vous esquisser un cas d'utilisation pour le problème qui vous inquiète? IIRC, Oracle est conscient de l'heure avancée, et (depuis la date est stockée) je ne sais pas comment vous pourriez perdre des informations - vous saurez si l'heure d'été était en vigueur, non?

- MarkusQ

La première chose que je vais essayer sauve une date et de voir ce que le décalant. En d'autres termes, le décalage numérique utilisé pour un fuseau horaire peut être (correctement) une fonction de la date.

Je suppose qu'une autre alternative, si cela ne fonctionne pas, consisterait à enregistrer le nom du fuseau horaire dans une colonne enum et à reconstruire l'heure si nécessaire. Pas joli, mais ...

+0

J'ai édité ma question pour élaborer un peu plus. – tobyc

+0

Une chose que je devrais peut-être clarifier est que je m'inquiète pour les dates à terme. Ceux dans lesquels l'effet de DST n'est pas connu. Je souhaite que l'événement se produise à l'heure voulue dans le fuseau horaire local. Par conséquent, j'ai besoin de savoir dans quel fuseau il a été sauvegardé. À la vôtre – tobyc