Synchronisation horraire (horloge atomique) avec gestion de délais

Contenu du snippet

Ce code sert à synchroniser l'heure de son programme en fonction de l'heure GMT (Greenwich mean time) ou si vous préférez, l'heure internationnale. Quoique déjà présent sur ce réseau, j'ai simplifié le code au max et comme vous le savez certainement, il y a un délais entre le temps d'envoi et de réception d'une donnée sur le net. Or, la NIST (Nationnal Institute of Standards and Technology), la société américaine qui vérifie constament la position de la terre en vue de donner l'heure exacte, inclus dans son envoi, une estimation de ce délais, j'ai donc intégré une façon simple d'obtenir l'heure la plus précise possible, malgré le traffic sur internet.

Pour utiliser ce code, commencez par ajouter un "command Buttons", un "winsock" et deux "timers" dont le "timer1" dont l'intervale doit être à "1000" et doivent tous deux être "enabled = false" et collez ce code, il vous permettra de variabiliser l'heure atomique et de l'incrémenter à chaque seconde, vous en faites ensuite ce que vous voulez...

Source / Exemple :


Dim hour As Byte                                'variable d'heure
Dim minute As Byte                             'variable de minute
Dim second As Byte                            'variable de seconde
Dim day As Byte                                  'variable de jour
Dim month As Byte                              'variable de mois
Dim year As Integer                            'variable d'année

Private Sub Command1_Click()
Winsock1.Close                                      'on ferme le winsock s'il est ouvert
tcptime.Connect "time.nist.gov", "13"    'on se connecte sur le serveur de la NIST
End Sub

Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
Dim data As String                               'variable de donnée brute
Winsock1.GetData data                       'chargement de la donnée brute
hour = Mid(data, 17, 2)                        'on enregistre l'heure
minute = Mid(data, 20, 2)                    'on enregistre la minute
second = Mid(data, 23, 2)                    'on enregistre la seconde
year = Mid(data, 8, 2)                          'l'année
month = Mid(data, 11, 2)                      'le mois
day = Mid(data, 14, 2)                          'le jour
second = second + 1                             'on ajoute une seconde pour compenser pour le délais du net
Timer1.Enabled = False                         'on arrête le timer1 (qui sert à incrémenter l'heure)
Timer2.Interval = 1000 - Mid(data, 31, 3) 'on prends une seconde et on y enlève le délais en MiliSeconde donné par la NIST
Timer2.Enabled = True                          'on démarre le timer2
End Sub

Private Sub Timer1_Timer()                          'timer d'incrémentation du temps
second = second + 1                                 'plus une seconde
If second = "60" Then second = "0": minute = minute + 1    'si on est rendu à 60 secondes, on ajoute une minute et on réinitialise la secondes
If minute = "60" Then minute = "0": hour = hour + 1            'si on est rendu à 60 minute, on ajoute une heure et on réinitialise la minute
If hour = "24" Then hour = "0"                                                'pas la peine de nous y attarder!
Me.Caption = hour & ":" & minute & ":" & second & " " & WeekdayName(Weekday(year & "-" & month & "-" & day)) & " " & day & " " & MonthName(month) & " " & year     'ça non plus!
End Sub

Private Sub Timer2_Timer()                          'timer de délais
Timer2.Enabled = False                                'quand on atteint notre délais, on arrête le timer2 et on démarre le timer1
Timer1.Enabled = True
End Sub

Conclusion :


pour plus d'informations concernant la synchronisation horraire, consultez le site web de la NIST (en anglais) au http://www.boulder.nist.gov/timefreq/service/its.htm

Bonne programmation.

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.