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

Classe SystemTime   



L'auteur

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

Fiche personnelle


Note des membres
18,5/20
2 votes


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

Classe SystemTime
# 0000000180
ajouté le 27/04/2005 15:20:59 et modifié le 29/04/2005
consulté 8974 fois
Niveau débutant

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

Description

petite classe de manipulation de SystemTime API en datetime VFP

Code source :
m.lcSt=CREATEOBJECT("SystemTime")
m.lcSt.GetUTC()
m.tUTC = m.lcSt.DateTime()
m.lcSt.GetLocal()
m.tLocal = m.lcSt.DateTime()
? m.tLocal-m.tUtc, "secondes d'écart entre UTC et Local"
? (m.tLocal-m.tUtc)/60, "minutes"
? (m.tLocal-m.tUtc)/3600, "heures"

DEFINE CLASS SystemTime as custom
  * SYSTEMTIME est composé de 8 WORD (soient 16 octets)
  #define SizeOfSystemTime 8*2

   cYear=SPACE(2)
   cMonth=SPACE(2)
   cDayOfWeek=SPACE(2)
   cDay=SPACE(2)
   cHour=SPACE(2)
   cMinute=SPACE(2)
   cSecond=SPACE(2)
   cMilliSec=SPACE(2)

  nYear=0
  nMonth=0
  nDayOfWeek=0
  nDay=0
  nHour=0
  nMinute=0
  nSecond=0
  nMilliSec=0

  tLocalDateTime=DATETIME()
  tUTCDateTime=DATETIME()

  FUNCTION Init
  ENDFUNC

  FUNCTION cYear_assign
  LPARAMETERS lcNewVal
  this.cYear=lcNewVal
  this.nYear=this.strToWord(lcNewVal)
  ENDFUNC

  FUNCTION cMonth_assign
  LPARAMETERS lcNewVal
  this.cMonth=lcNewVal
  this.nMonth=this.strToWord(lcNewVal)
  ENDFUNC

  FUNCTION cDayOfWeek_assign
  LPARAMETERS lcNewVal
  this.cDayOfWeek=lcNewVal
  this.nDayOfWeek=this.strToWord(lcNewVal)
  ENDFUNC

  FUNCTION cDay_assign
  LPARAMETERS lcNewVal
  this.cDay=lcNewVal
  this.nDay=this.strToWord(lcNewVal)
  ENDFUNC

  FUNCTION cHour_assign
  LPARAMETERS lcNewVal
  this.cHour=lcNewVal
  this.nHour=this.strToWord(lcNewVal)
  ENDFUNC

  FUNCTION cMinute_assign
  LPARAMETERS lcNewVal
  this.cDayOfWeek=lcNewVal
  this.nDayOfWeek=this.strToWord(lcNewVal)
  ENDFUNC

  FUNCTION cSecond_assign
  LPARAMETERS lcNewVal
  this.cSecond=lcNewVal
  this.nSecond=this.strToWord(lcNewVal)
  ENDFUNC

  FUNCTION cMilliSec_assign
  LPARAMETERS lcNewVal
  this.cMilliSec=lcNewVal
  this.nMilliSec=this.strToWord(lcNewVal)
  ENDFUNC

  FUNCTION strToWord
  LPARAMETERS lcVal
  return  ASC(LEFT(lcVal,1))+256*ASC(RIGHT(lcVal,1))
  ENDFUNC

  FUNCTION Destroy
    CLEAR DLLS "GetLocalTime","GetSystemTime"
  ENDFUNC

  PROCEDURE GetUTC
    LOCAL lcBuff
    lcBuff=REPLICATE(CHR(32), SizeOfSystemTime)
    DECLARE GetSystemTime IN WIN32API String@ pST
    GetSystemTime(@lcbuff)
    this.cYear=SUBSTR(lcBuff,1,2)
    this.cMonth=SUBSTR(lcBuff,3,2)
    this.cDayOfWeek=SUBSTR(lcBuff,5,2)
    this.cDay=SUBSTR(lcBuff,7,2)
    this.cHour=SUBSTR(lcBuff,9,2)
    this.cMinute=SUBSTR(lcBuff,11,2)
    this.cSecond=SUBSTR(lcBuff,13,2)
    this.cMilliSec=SUBSTR(lcBuff,15,2)
  ENDPROC

  PROCEDURE GetLocal
    LOCAL lcBuff
    DECLARE GetLocalTime IN WIN32API String@ pST
    lcBuff=REPLICATE(CHR(32), SizeOfSystemTime)
    GetLocalTime(@lcbuff)
    this.cYear=SUBSTR(lcBuff,1,2)
    this.cMonth=SUBSTR(lcBuff,3,2)
    this.cDayOfWeek=SUBSTR(lcBuff,5,2)
    this.cDay=SUBSTR(lcBuff,7,2)
    this.cHour=SUBSTR(lcBuff,9,2)
    this.cMinute=SUBSTR(lcBuff,11,2)
    this.cSecond=SUBSTR(lcBuff,13,2)
    this.cMilliSec=SUBSTR(lcBuff,15,2)
  ENDPROC

  FUNCTION DateTime
    WITH this
      RETURN DATETIME(.nYear, .nMonth, .nDay, .nHour, .nMinute, .nSecond)
    ENDWITH
  ENDFUNC

ENDDEFINE

Commentaires
le 27/04/2005, Francis Faure a écrit :
Fred, super, et très pratique,
j'avais déjà vu quelque chose sur similaire sur foxtalk, mais ta solution est bien plus simple...Bravo.

le 28/04/2005, FoxInCloud (Th. Nivelet) a écrit :
J'ai proposé ton code à un client.
Je n'oublierai pas de mentionner l'auteur !

le 29/04/2005, Mike Gagnon a écrit :
Tres bien Fred, et sans meme utliser WMI.

le 05/05/2022, jcriv a écrit :
Bizarre, petite erreur sur les minutes :
FUNCTION cMinute_assign
LPARAMETERS lcNewVal
this.cDayOfWeek=lcNewVal
this.nDayOfWeek=this.strToWord(lcNewVal)
ENDFUNC


Publicité

Les pubs en cours :


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