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.564 mal aufgerufen. Voriger Tipp | Zufälliger Tipp | Nächster Tipp
Anzeige
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. |
sevISDN 1.0 Überwachung aller eingehender Anrufe! Die DLL erkennt alle über die CAPI-Schnittstelle eingehenden Anrufe und teilt Ihnen sogar mit, aus welchem Ortsbereich der Anruf stammt. Weitere Highlights: Online-Rufident, Erkennung der Anrufbehandlung u.v.m. Tipp des Monats April 2024 Skyfloy Chart von Microsoft und dazu noch gratis Tutorial für Microsoft Chart Controls für Microsoft .NET Framework 3.5 Neu! sevDTA 3.0 Pro SEPA mit Kontonummernprüfung Erstellen von SEPA-Dateien mit integriertem BIC-Verzeichnis und Konto- nummern-Prüfverfahren, so dass ungültige Bankdaten bereits im Vorfeld ermittelt werden können. |
||||||||||||||||
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. |