ATOUTFOX
COMMUNAUTÉ FRANCOPHONE DES PROFESSIONNELS FOXPRO
Visual FoxPro : le développement durable

Convertir un datetime en GMT (en tenant compte de l'heure d'été).   



L'auteur

Anatole
France France
Membre Simple
# 0000000002
enregistré le 12/10/2004

Fiche personnelle


Note des membres
pas de note

Contributions > 01 - PRG : Programmation > Temps - heures - Dates - Calendriers

Convertir un datetime en GMT (en tenant compte de l'heure d'été).
# 0000000482
ajouté le 19/09/2007 11:17:05 et modifié le 19/09/2007
consulté 4803 fois
Niveau débutant

Version(s) Foxpro :
VFP 9.0
VFP 8.0
VFP 7.0

Description

Convertit un datetime au format GMT en tenant compte de l'heure d'hiver/été.

Code source :
procedure Datetime2Gmt(tDatetime as Datetimeas String
local cGmt
  if Empty(m.tDatetime)
    m.tDatetime = Datetime()
  endif
  *---> Mise à jour à l'heure GMT
  m.tDatetime = m.tDatetime - DecalageGmt(m.tDatetime) * 3600
  return GetWordNum("Mon,Tue,Wed,Thu,Fri,Sat,Sun"Dow(m.tDatetime, 2), ",") + ", " +;
         Ltrim(Str(Day(m.tDatetime))) + " " +;
         GetWordNum("Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec"Month(m.tDatetime), ",") + " " +;
         Str(Year(m.tDatetime), 4) + " " + Substr(Ttoc(m.tDatetime), 12, 8) + " GMT"
endproc && Datetime2Gmt

procedure DecalageGmt(tDateTime as DateTimeas Integer
local dDate, tMars, tOctobre
   *---> Recherche du dernier dimanche de mars à 3h du matin
   m.dDate = Date(Year(m.tDateTime), 3, 31)
   m.tMars = Dtot(m.dDate - Dow(m.dDate, 2) % 7) + 3 * 3600
   *---> Recherche du dernier dimanche d'octobre à 2h du matin
   m.dDate = Date(Year(m.tDateTime), 10, 31)
   m.tOctobre = Dtot(m.dDate - Dow(m.dDate, 2) % 7) + 2 * 3600
   return Iif(Between(m.tDateTime, m.tMars, m.tOctobre), 2, 1)
endproc && DecalageGmt
Commentaires
le 19/09/2007, FredA a écrit :
où as tu trouver cet appel de l'API GetTimeZoneInformation sans parametre?
MSDN ne la donne pas?
bon boulot en tous cas.

le 19/09/2007, FredA a écrit :
de plus, un essai en C++ de GetTimeZoneInformation sans parametre n'est pas connu, et en passant NULL, bien sur, provoque une C0..05. Je suis perplexe pour le moins <s>
le 19/09/2007, Anatole a écrit :
Il y a un bug dans cette procédure car le différencielle d'heure
est sur la date courante à cause GetTimeZoneInformation.

Je suis en train de la corriger.

le 19/09/2007, FredA a écrit :
pour info, tu as l'appel normalisé (avec parametre) ici : http://www.atoutfox.org/articles.asp?ACTION=FCONSULTER&ID=0000000476
un autre moyen est de passer par les structures SYSTEMTIME et les GetLocalTime et GetSystemTime

le 19/09/2007, Anatole a écrit :
Elle est corrigée à présent
le 20/09/2007, Robert Plagnard a écrit :
Frédéric et Anatole, vos commentaires sont surréalistes ... je ne vois pas de "GetTimeZoneInformation" dans ces lignes de code ??
le 21/09/2007, FredA a écrit :
Anatole utilisait cet API dans la première version de ce code. Il a ensuite detecté une erreur. La correction a entrainé la suppression de cet API.
Voilà l'explication.


Publicité

Les pubs en cours :


www.atoutfox.org - Site de la Communauté Francophone des Professionnels FoxPro - v3.4.0 - © 2004-2019.
Cette page est générée par un composant COM+ développé en Visual FoxPro 9.0-SP2-HF3