vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
TOP-Angebot: 17 bzw. 24 Entwickler-Vollversionen zum unschlagbaren Preis!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück
Rubrik: Datum/Zeit und Timer · Datums- und Zeit-Funktionen   |   VB-Versionen: VB.NET12.11.07
Aktuelle Atomzeit ermitteln (VB 2005)

Mit dieser Funktion lässt sich die sekundengenaue Atomzeit über einen beliebigen Zeitserver im Internet ermitteln.

Autor:   Dieter OtterBewertung:     [ Jetzt bewerten ]Views:  23.532 
www.tools4vb.deSystem:  WinNT, Win2k, WinXP, Win7, Win8, Win10, Win11 Beispielprojekt auf CD 

Nachfolgender Tipp zeigt, wie sich unter VB 2005 die Atomzeit über das Internet auslesen und die aktuelle Systemzeit entsprechend der Atomzeit aktualisieren lässt.

Alles, was Sie hierzu brauchen, ist die Adresse eines Time-Servers, sowie die System.Net.Sockets-Klasse. Als Time-Server nehmen wir in unserem Beispiel time-a.nist.gov. Die Atomzeit wird hierbei in folgendem Format übermittelt: xxxxx yy-mm-dd hh:mm:ss xx x x xx.x UTC(NIST) *. Man braucht dann lediglich das Datum und die Uhrzeit zu extrahieren und die Zeit-Differenz zur GMT-Zeit addieren (Sommer-/Winterzeit).

Imports System.Net.Sockets
Imports System.Text
Private Function AtomicTime(ByVal sTimeServer As String) As Date
  ' Standard-Rückgabewert bei Fehler
  Dim vDate As Date = Nothing
 
  Try
    ' Verbindung zum TimerServer herstellen
    Dim oClient As TcpClient = New TcpClient()
    oClient.Connect(sTimeServer, 13)
 
    ' NetworkStream-Objekt für die Antwort
    Dim oStream As NetworkStream = oClient.GetStream()
 
    ' Antwort des TimeServer lesen
    Dim cCh1 As Char
    Dim sResponse As New StringBuilder
    Dim nByte As Integer
 
    ' solange byteweise einlesen, bis keine 
    ' Daten mehr vom Server zurückkommen
    Do
      nByte = oStream.ReadByte()
      If nByte = -1 Then Exit Do
      cCh1 = System.Convert.ToChar(nByte)
      sResponse.Append(cCh1.ToString)
    Loop Until nByte = 13
 
    ' Verbindung trennen
    oClient.Close()
 
    If sResponse.Length > 0 Then
      Dim sBuffer As String = sResponse.ToString
 
      ' Atomzeiten werden in folgendem Format übermitteln:
      ' xxxxx yy-mm-dd hh:mm:ss xx x x  xx.x UTC(NIST) *
 
      ' Datum und Uhrzeit aus dem Rückgabestring des 
      ' TimeServers extahieren
      If sBuffer.Contains(" ") Then
        Dim sData() As String = sBuffer.Split(" ")
        If sData(1).Length = 8 AndAlso sData(2).Length = 8 Then
          ' Datumsangabe in Einzelteile splitten
          Dim sDate() As String = Split(sData(1), "-")
 
          ' Uhrzeitangabe in Einzelteile splitten
          Dim sTime() As String = Split(sData(2), ":")
 
          ' einzelne Datumswerte und Uhrzeitwerte zu neuem 
          ' Date-Objekt zusammenstellen
          vDate = New DateTime(2000 + CInt(sDate(0)), _
            CInt(sDate(1)), CInt(sDate(2)), _
            CInt(sTime(0)), CInt(sTime(1)), CInt(sTime(2)))
 
          ' jetzt noch ggf. Sommer/Winterzeit berücksichtigen
          Dim nDif As Integer = Val(Now.ToString("zzzz").Substring(0, 3))
          If nDif <> 0 Then
            vDate = vDate.AddHours(nDif)
          End If
        End If
      End If
    End If
  Catch ex As Exception
    vDate = Nothing
  End Try
 
  Return vDate
End Function

Die Funktion gibt im Erfolgsfall die ermittelte Atomzeit zurück. Sollte der Time-Server nicht erreichbar sein oder ein anderweitiger Fehler auftreten, wird "Nothing" zurückgegeben.

Aufrufbeispiel:

Dim vDate As Date = AtomicTime("time-a.nist.gov")
If Not vDate = Nothing Then
  MsgBox("Die aktuelle Atomzeit ist: " & vDate)
 
  ' Systemzeit mit Atomzeit aktualisieren
  Microsoft.VisualBasic.DateString = vDate.ToString("MM-dd-yyyy")
  Microsoft.VisualBasic.TimeString = vDate.ToString("HH:mm:ss")
 
Else
  MsgBox("Atomzeit konnte nicht ermittelt werden!")
End If

Dieser Tipp wurde bereits 23.532 mal aufgerufen.

Voriger Tipp   |   Zufälliger Tipp   |   Nächster Tipp

Über diesen Tipp im Forum diskutieren
Haben Sie Fragen oder Anregungen zu diesem Tipp, können Sie gerne mit anderen darüber in unserem Forum diskutieren.

Neue Diskussion eröffnen

nach obenzurück


Anzeige

Kauftipp Unser Dauerbrenner!Diesen und auch alle anderen Tipps & Tricks finden Sie auch auf unserer aktuellen vb@rchiv  Vol.6
(einschl. Beispielprojekt!)

Ein absolutes Muss - Geballtes Wissen aus mehr als 8 Jahren vb@rchiv!
- nahezu alle Tipps & Tricks und Workshops mit Beispielprojekten
- Symbol-Galerie mit mehr als 3.200 Icons im modernen Look
Weitere Infos - 4 Entwickler-Vollversionen (u.a. sevFTP für .NET), Online-Update-Funktion u.v.m.
 
   

Druckansicht Druckansicht Copyright ©2000-2024 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel