2009-08-11 5 views
4

Mon application convertit les dates passées et présentes de l'heure locale à l'heure UTC.Conversion d'anciennes et de nouvelles heures locales en UTC sous Windows XP/Server 2003

Je dois m'assurer que je vais honorer toutes les futures mises à jour DST pour Windows tout en gérant correctement les dates antérieures.

L'application est écrit en C++ et est en cours d'exécution sur le serveur 2003.

Options J'ai fait des recherches:

Alors ...

  • ... est toute autre personne utilisant la solution de registre brut pour le faire?

  • ... d'autres suggestions?

(edit: a découvert dst_calc_engine doesn't support DST updates)

Répondre

2

Je pense que je préférerais ré-implémenter GetTimeZoneInformationForYear et éventuellement GetDynamicTimeZoneInformation basé sur les informations dans le registre à HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones. De cette façon, votre code suivra les mises à jour de Windows et vous pourrez échanger le code corrompu pour l'implémentation réelle sur des plates-formes de niveau supérieur.

Puisque vous ne voulez pas utiliser une base de données externe, je pense qu'aucune autre option n'est viable.

+0

J'aime l'idée de le ré-implémenter avec une signature identique au remplacement de sorte que l'API native puisse être un remplacement direct quand nous passerons à Server 2008. – mskfisher

+0

Il y a (au moins :) un risque associé à cette stratégie, bien que. Ces deux fonctions sont assez nouvelles - si des bogues y sont trouvés, et ils sont mis à jour avec les données de fuseau horaire dans un nouveau format, vos fonctions pourraient être brisées. Cela ne semble pas très probable, mais c'est toujours un risque lorsqu'on utilise des données «sous-API», comme le support du registre pour les informations de fuseau horaire. –

+0

@ KimGräsman Avez-vous publié votre solution quelque part? – kol

0

Vous pouvez utiliser gmtime() et localtime() pour les dates en 2007 et plus tard (et profiter des mises à jour de Windows DST), et utiliser Boost ou un des autres solutions que vous avez mentionnées pour utiliser les bonnes règles DST pour 2006 et avant.

+0

Malheureusement, gmtime() et localtime() ne respectent que les paramètres DST actuels. Si les méthodes DST de Windows sont mises à jour en 20xx, gmtime() et localtime() seront invalides pour les dates comprises entre 2007 et 20xx. J'ai mis à jour la question pour le noter. – mskfisher

+0

Bummer!Oui, cela vous met dans une situation difficile - vous voulez certains aspects des mises à jour Windows DST, mais pas d'autres. Je n'ai plus d'idées alors - j'espère que vous trouverez quelque chose qui fonctionne pour vous. –

Questions connexes