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