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

Récupérer des informations régionales de date (décalage horaire par exemple)   



L'auteur

FredA
France France
Membre Simple
# 0000000005
enregistré le 12/10/2004

Fiche personnelle


Note des membres
pas de note

Contributions > 05 - API et appels systèmes

Récupérer des informations régionales de date (décalage horaire par exemple)
# 0000000476
ajouté le 11/09/2007 16:57:24 et modifié le 11/09/2007
consulté 9424 fois
Niveau débutant

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

Description
Petite contribution pour l'exploitation de l'API GetTimeZoneInformation.
L'exemple récupère l'information de décalage horaire par rapport à l'heure GMT (ou UTC).
Code source :
? GetGMTBias()

#DEFINE TIME_ZONE_ID_DAYLIGHT 2

FUNCTION StrToLong
PARAMETERS lcLongstr
PRIVATE i, lnRetval
lnRetval = 0
  FOR i = 0 TO 24 STEP 8
    lnRetval = lnRetval + (ASC(lcLongstr) * (2^i))
    lcLongstr = RIGHT(lcLongstr, LEN(lcLongstr) - 1)
  NEXT
RETURN lnRetval

*typedef struct _TIME_ZONE_INFORMATION { // tzi
*    LONG       Bias;          4
*    WCHAR      StandardName[ 32 ];    64 (unicode sinon 32)
*    SYSTEMTIME StandardDate;      SizeOfSystemTime 16
*    LONG       StandardBias;      4
*    WCHAR      DaylightName[ 32 ];    64 (unicode sinon 32)
*    SYSTEMTIME DaylightDate;      SizeOfSystemTime 16
*    LONG       DaylightBias;      4
*} TIME_ZONE_INFORMATION;

FUNCTION GetGMTBias as String
  LOCAL res, liBias, TZInfo, liRetCode, liDayLightBias
  res=""
  liBias=0
  TZInfo = SPACE(172)
  DECLARE INTEGER GetTimeZoneInformation IN kernel32 STRING @TZInfo


  liRetCode = GetTimeZoneInformation(@TZInfo)
  liBias = StrToLong(SUBSTR(TZInfo, 1, 4)) - 2 ^ 32

  IF liRetCode=TIME_ZONE_ID_DAYLIGHT
  * récupérer li BiasDaylight
    liDaylightBias = StrToLong(SUBSTR(TZInfo, 169, 4)) - 2 ^ 32
    liBias = liBias + liDaylightBias
  ENDIF

  liBias = liBias * -1  &&Bias donne la convertion local->gmt, il faut l'inverse

  IF liBias!=0
    IF liBias>0
      res = res + " +"

    ELSE
      res = res + " -"
      liBias = liBias * -1
    ENDIF

    diffH=INT(liBias / 60)
    diffM=liBias-(60*diffH)

    res = res + PADL(ALLTRIM(STR(diffH)), 2, '0')
    IF diffM!=0
      res = res + padl(ALLTRIM(STR(diffM)), 2, '0')
    ELSE
      res = res + "00"
    ENDIF
  ENDIF
  CLEAR DLLS "GetTimeZoneInformation"
RETURN res

Commentaires
le 19/03/2008, Francis Faure a écrit :
Merci Fred pour cette contribution !
je viens de me plonger dedans pour vfpwinsock et examiné l'API : GetTimeZoneInformation
avec mes tests j'ai pu voir un disfonctionnement dans ton code pour le cas où le fuseau horaire est en GMT +0 (Londres par exemple).
D'autre part la fonction StrToLong peut être remplacée par un buf2word.
Je poste ma version similaire pour cette fonction
Cordialement
Francis

le 20/03/2008, FredA a écrit :
exact, c'est bien

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