comment faire un decalage horaire

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
scaraber
Messages : 362
Inscription : ven. 15/juil./2005 17:32

comment faire un decalage horaire

Message par scaraber »

salut je sui sactuellemnt en train de faire une horlogemultifonction ( je la passerai iune fois fini ) j'ai bien avancer maisil me reste a faire un decalage horaire si quelqun savait coment faire ...
lionel_om
Messages : 1500
Inscription : jeu. 25/mars/2004 11:23
Localisation : Sophia Antipolis (Nice)
Contact :

Message par lionel_om »

AddDate() ???
Webmestre de Basic-univers
Participez à son extension: ajouter vos programmes et partagez vos codes !
fweil
Messages : 505
Inscription : dim. 16/mai/2004 17:50
Localisation : Bayonne (64)
Contact :

Message par fweil »

@scaraber,

Il faut en premier tout gérer en interne en temps UTC, ou GMT, et disposer d'une table des décalages en fonction de la zone horaire.

Pour démarrer, voici un bout de code avec les API (valable sous Windows NT / XP), qui permet de synchroniser le temps système du poste de travail, de récupérer le temps UTC et le temps local, ainsi que les informations de zone locale.

A noter que la fonction OS net time est un joli raccourci pour accéder à la synchro ntp. Avant il fallait se taper l'appel au serveur et la négociation pour obtenir la synchro.

Code : Tout sélectionner

Procedure.s Format_Internal_Time(Address.l, Separator.s)
*Time.SYSTEMTIME = Address
  Debug "Address = " + Str(Address)
  Result.s = ""
  sDayOfWeek.s = "Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday"
  Result.s = "Year : " + Str(*Time\wYear) + Separator
  Result + "Month : " + Str(*Time\wMonth) + Separator
  Result + "Day of week : " + StringField(sDayOfWeek, *Time\wDayOfWeek + 1, ",") + Separator
  Result + "Day : " + Str(*Time\wDay) + Separator
  Result + "Hour : " + Str(*Time\wHour) + Separator
  Result + "Minute : " + Str(*Time\wMinute) + Separator
  Result + "Second : " + Str(*Time\wSecond) + Separator
  Result + "Millisecond : " + Str(*Time\wMilliseconds)
  ProcedureReturn Result
EndProcedure

  ;
  ; sntp NT / XP synchro
  ;
  RunProgram("net", "time /setsntp:pool.ntp.org", "", 1 | 2)
  
  ;
  ; Here you get system tme (UTC time)
  ;
  GetSystemTime_(SystemTime.SYSTEMTIME)
  sST.s = Format_Internal_Time(SystemTime, Chr(10))

  ;
  ; Here you get local time
  ;
  GetLocalTime_(Local.SYSTEMTIME)
  sLT.s = Format_Internal_Time(Local, Chr(10))
  
  ;
  ; Here you get the local time time zone name
  ;
  GetTimeZoneInformation_(TimeZoneInfo.TIME_ZONE_INFORMATION)  
  sStandardName.s = ""
  i = 0
  While TimeZoneInfo\StandardName[i] <>0 And i <= 32
    sStandardName + Chr(TimeZoneInfo\StandardName[i])
    i + 1
  Wend
  sInfo.s = "Time zone : " + sStandardName + Chr(10)
  sInfo + "UTC + " + Str(TimeZoneInfo\DaylightDate\wHour)
  
  MessageRequester("Time information : ", sST + Chr(10) + Chr(10) + sLT + Chr(10) + Chr(10) + sInfo, #PB_MessageRequester_Ok)
  
End
Mon avatar reproduit l'image de 4x1.8m présentée au 'Salon international du meuble de Paris' en janvier 2004, dans l'exposition 'Shades' réunisant 22 créateurs autour de Matt Sindall. L'original est un stratifié en 150 dpi.
Répondre