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

Partagez votre expérience de PureBasic avec les autres utilisateurs.
Avatar de l’utilisateur
falsam
Messages : 7317
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

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

Message 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
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
nico
Messages : 3702
Inscription : ven. 13/févr./2004 0:57

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

Message par nico »

Sympa le code :)
J'ai 6 secondes de retard sur le PC!
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

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

Message par Backup »

.................
Dernière modification par Backup le lun. 08/oct./2012 22:02, modifié 1 fois.
Avatar de l’utilisateur
falsam
Messages : 7317
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

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

Message 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.
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

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

Message par Backup »

Ton code a l'avantage de mettre à jour l'horloge du PC d’après ce que je comprend.

oui :)
Warkering
Messages : 808
Inscription : ven. 08/janv./2010 1:14
Localisation : Québec, Canada

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

Message par Warkering »

Je dois être le seul ici dont la fête a durée très exactement 86401 secondes ! :mrgreen:
Répondre