Convertir TDateTime à un Autre fuseau Horaire, Indépendamment de l'Heure Locale de la Zone
Indépendamment de ce que l'utilisateur de la zone de l'heure locale est de définir, à l'aide de Delphi 2007, j'ai besoin de déterminer le temps (TDateTime) dans le fuseau horaire.
Comment puis-je le faire? Bien sûr, doit être l'heure d'été au courant.
Et année bissextile au courant...
OriginalL'auteur Dave | 2009-03-27
Vous devez vous connecter pour publier un commentaire.
TDateTime n'ont pas les informations de fuseau horaire (c'est juste un double - date de nombre entier, en temps comme en décimal), de sorte que vous devez séparément. Vous aurait besoin de votre propre logique de l'heure d'été ainsi, je ne crois pas qu'il y est tout à Delphes. Ensuite, utilisez la IncHour fonction dans DateUtils.pas de modifier la TDateTime à l'est de Fuseau horaire.
Il y a probablement des services web qui va le faire pour vous. Votre application doit être autonome, ou peut on se connecter sur le web pour le faire?
OriginalL'auteur Jim McKeeth
Si je vous comprends bien, vous souhaitez que l'Heure de l'est équivalent à l'heure actuelle du système.
Pour ce faire, utilisez la WiNAPI fonction
GetSystemTime()
pour obtenir l'heure actuelle de l'ordinateur en UTC. UTC est indépendant du temps, de zones et sera toujours de vous rendre à l'heure au méridien d'origine.Vous pouvez ensuite utiliser la WinAPI fonction
SystemTimeToTzSpecificLocalTime()
pour calculer l'heure locale dans n'importe quelle autre fuseau horaire de l'heure UTC. Afin queSystemTimeToTzSpecificLocalTime()
pouvez travailler, vous avez besoin de lui donner unTTimeZoneInformation
de l'enregistrement qui est rempli avec les informations correctes pour le fuseau horaire que vous souhaitez convertir.L'exemple suivant vous donne toujours l'heure locale, Heure de l'est conformément à la Loi sur la Politique Énergétique de 2005.
A partir de Windows Vista SP1 et Windows Server 2008, vous pouvez utiliser le GetTimeZoneInformationForYear fonction pour récupérer les paramètres de fuseau horaire pour une année donnée à partir du système d'exploitation.
Si j'utilise DateTimeToSystemTime(StrToDateTime('06/29/2017 5:15:00'),T); le temps de la est est 1 h 15 au lieu de 12:15 am
Le code renvoie à la fois dans l'EDT au lieu de l'est quand la date se trouve à l'intérieur de l'heure d'été à des périodes.
Merci, je l'ai découvert quand j'ai essayé d'autres dates.
OriginalL'auteur NineBerry
Pour être plus précis, TDateTime n'est pas un objet, c'est juste un alias pour le double.
Il fut un temps où il n'y avait pas de fonctionnalité de commentaire dans le Débordement de la Pile. Ce n'était que de laisser un message ou à la correction 🙂
Beaucoup de changements dans 5 ans 🙂
OriginalL'auteur Harriv