Page 1 sur 1

Ce 30 juin, la toute dernière minute de la journée durera...

Publié : sam. 30/juin/2012 20:10
par falsam
Ce 30 juin, la toute dernière minute de la journée durera... 61 secondes.

La dernière minute du mois de juin 2012 comptera 61 secondes. Une façon comme une autre de remettre les pendules à l'heure.
Pourquoi cette seconde intercalaire ? Pour permettre au temps universel défini par les horloges atomiques de compenser son avance sur celui rythmé par la rotation de la Terre, bien plus irrégulière.

Le code ci-dessous vous permet de mettre à l'heure les horloges de vos grand-mères en se connectant sur un serveur de temps. (http://nephi.unice.fr/ntp/)

Code : Tout sélectionner

Enumeration
  #FontApp
  #Mainform
  #DateTime
  #Timer
EndEnumeration

Procedure GetInternetTime(Server.s = "ntp.unice.fr")
  Protected lSocket = OpenNetworkConnection(Server, 37)
  Protected *lBuffer, lNTPTime
  
  If lSocket
    Repeat
      Select NetworkClientEvent(lSocket)
        Case #PB_NetworkEvent_Data
          *lBuffer = AllocateMemory(5)
          If *lBuffer
            If ReceiveNetworkData(lSocket, *lBuffer, 4) = 4                       
              lNTPTime = (PeekA(*lBuffer + 0)) << 24
              lNTPTime + (PeekA(*lBuffer + 1)) << 16
              lNTPTime + (PeekA(*lBuffer + 2)) << 8
              lNTPTime + (PeekA(*lBuffer + 3))
              
              lNTPTime = AddDate(lNTPTime - 2840140800, #PB_Date_Year, 20)
              lNTPTime = AddDate(lNTPTime, #PB_Date_Hour, 2)
              
              FreeMemory(*lBuffer)
            EndIf
            CloseNetworkConnection(lSocket)
            Break
          EndIf
      EndSelect
    ForEver
  EndIf
  
  ProcedureReturn lNTPTime
EndProcedure

Procedure Open_MainForm()
  LoadFont(#FontApp, "Arial", 23)
  SetGadgetFont(#PB_Default,FontID(#FontApp)) 

  InitNetwork()
  OpenWindow(#Mainform, 0, 0, 520, 100, "Seconde intercalaire")
  SetWindowColor(#Mainform, RGB(173, 177, 199))
  TextGadget(#DateTime, 10, 30, 500, 30, "Connection ...")
  SetGadgetColor(#DateTime, #PB_Gadget_BackColor, RGB(173, 177, 199))
  SetGadgetColor(#DateTime, #PB_Gadget_FrontColor, RGB(20, 35, 216))
  AddWindowTimer(#Mainform, #Timer, 1000)
EndProcedure

Open_MainForm()

Repeat
  Event = WaitWindowEvent()
  TEVent = EventTimer()
  
  Select Event
    Case #PB_Event_Timer
      If Tevent = #Timer
        SetGadgetText(#DateTime, FormatDate("Date : %dd.%mm.%yyyy  Heure : %hh:%ii:%ss", GetInternetTime()))
      EndIf
      
    Case #PB_Event_CloseWindow
      End
  EndSelect
  
ForEver

Re: Ce 30 juin, la toute dernière minute de la journée durer

Publié : sam. 30/juin/2012 21:30
par nico
Sympa le code :)
J'ai 6 secondes de retard sur le PC!

Re: Ce 30 juin, la toute dernière minute de la journée durer

Publié : dim. 01/juil./2012 12:09
par Backup
.................

Re: Ce 30 juin, la toute dernière minute de la journée durer

Publié : dim. 01/juil./2012 12:34
par falsam
Bonjour Dobro. Change ton serveur de temps pour avoir l'heure d'été :)
Ton code a l'avantage de mettre à jour l'horloge du PC d’après ce que je comprend.

Re: Ce 30 juin, la toute dernière minute de la journée durer

Publié : dim. 01/juil./2012 15:43
par Backup
Ton code a l'avantage de mettre à jour l'horloge du PC d’après ce que je comprend.

oui :)

Re: Ce 30 juin, la toute dernière minute de la journée durer

Publié : lun. 09/juil./2012 3:15
par Warkering
Je dois être le seul ici dont la fête a durée très exactement 86401 secondes ! :mrgreen: