Java Uhrzeit in VB2010

  • VB.NET

Es gibt 11 Antworten in diesem Thema. Der letzte Beitrag () ist von Trunk.

    Java Uhrzeit in VB2010

    Hallo Leute,
    Ich bin neu hier und programmiere schon seit längerem mit VB.
    Euer Forum ist echt genial :D
    So nun zu meiner Frage: Ich programmiere eine Art FTP Stream, wo auf dem Server eine txt Datei erstellt wird.
    Diese beinhaltet immer eine Uhrzeit=Link zur Audiodatei.
    Dies funktioniert bis jetzt sehr gut, jedoch liegt mein Problem darin, dass die Uhrzeit von Pc zu Pc
    um 10 - 20 sek variiert, somit wird alles nicht synchron abgespielt.
    Jetzt ist mir eingefallen wie es wäre, wenn ich aus einer online Uhr die Uhrzeit auslesen würde, z.B. im Webbrowser control auf eine
    html datei auf dem Server zu navigieren. Da meine uhr aber mit java programmiert kann ich weder mit Webbrowser.Documenttext.Split usw. was machen
    noch mit RegEx.Könntet ihr mir bitte helfen ?
    Hier die Uhr:

    Quellcode

    1. <!--
    2. Kostenlose, frei konfigurierbare Homepage-Uhr von www.schnelle-online.info/Homepage/Tools.html. Ohne Gewähr, ohne Haftung.
    3. Nutzungbedingung: Dieser Kommentar und der Link unten dürfen nicht entfernt oder (nofollow) modifiziert werden.
    4. -->
    5. <a style="text-decoration:none;border-style:none;color:black;"
    6. target="_blank"
    7. href="http://www.schnelle-online.info/Atomuhr-Uhrzeit.html"
    8. id="soitime73590734110">Atomuhr</a>
    9. <script type="text/javascript">
    10. SOI = (typeof(SOI) != 'undefined') ? SOI : {};(SOI.ac21fs = SOI.ac21fs || []).push(function() {
    11. (new SOI.DateTimeService("73590734110", "DE")).start();});
    12. (function() {if (typeof(SOI.scrAc21) == "undefined") {
    13. SOI.scrAc21=document.createElement('script');SOI.scrAc21.type='text/javascript';
    14. SOI.scrAc21.async=true;SOI.scrAc21.src=((document.location.protocol ==
    15. 'https:') ? 'https://' : 'http://') +
    16. 'homepage-tools.schnelle-online.info/Homepage/atomicclock2_1.js';var s =
    17. document.getElementsByTagName('script')[0];
    18. s.parentNode.insertBefore(SOI.scrAc21, s);}})();
    19. </script>
    hey. wenn du die Seite mit einem Net.Webcient (per DownloadString) herunterlädst gibt es eine Zeile die so aussieht:

    <td><span id="soiclock" style="font-size:50px;">19:33:15</span></td>

    Diese könntest du einfach ausfindig machen indem du den String zeilenweise durchläufst (Stichwort: Split und For-Each-Schleife). Schon hast du deine Uhrzeit. Diese könnte allerdings wegen der Übertragungsgeschwindigkeit immernoch einige Sekunden nachhängen.
    Hey, herzlichen dank, ich werds mal versuchen, wäre es nicht möglich die Uhrzeit mit RegEx oder Split ausfinding machen ?

    Meintest du vielleicht sowas ?

    Quellcode

    1. Dim client As New Net.WebClient
    2. Dim abc As String = client.DownloadString("http://________________/clock.html")
    3. MsgBox(abc)
    Da mich das interessiert hat habe ich es mal umgesetzt:

    VB.NET-Quellcode

    1. WithEvents wp As New Net.WebClient
    2. Dim TimeOffset As TimeSpan = TimeSpan.FromSeconds(0)
    3. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    4. wp.DownloadStringAsync(New Uri("http://www.schnelle-online.info/Atomuhr-Uhrzeit.html"))
    5. End Sub
    6. Private Sub wp_DownloadStringCompleted(ByVal sender As Object, ByVal e As System.Net.DownloadStringCompletedEventArgs) Handles wp.DownloadStringCompleted
    7. Dim time As Date = Nothing
    8. For Each l As String In Split(e.Result, vbCrLf)
    9. If l.Contains("<td><span id=""soiclock"" style=""font-size:50px;"">") Then
    10. Dim tmp As String = l.Replace("<td><span id=""soiclock"" style=""font-size:50px;"">", "")
    11. tmp = tmp.Replace("</span></td>", "")
    12. time = Date.Parse(tmp)
    13. Exit For
    14. End If
    15. Next
    16. TimeOffset = time - Now
    17. End Sub



    Da das ein relativ Zeitaufwendiger vorgang ist empfiehlt es sich, das nur einmal zu machen - beim Programmstart. Man berechnet dann den Unterschied zwischen Windowsuhr und OnlineUhr. So kann man zu jedem Zeitpunkt zurückrechnen wie die Online-Uhr aussieht:

    VB.NET-Quellcode

    1. Dim OnlineTime As Date = Now + TimeOffset
    Wieso, es ist kein direkter ftp Stream. Einfach nur eine festgelegte Reihenfolge von Dateien.
    Also wird per downloadstring eine Datei runtergeladen die so aussieht.
    20:00= www.hallo.1.mp3
    20:03=www.hallo.2.mp
    usw. ...

    Danke FreakJNS, hat mich wircklich weiter gebracht und es freut mich, dass es dich interessiert hat :D

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Trunk“ ()

    Hehe, bei mir sogar sehr genau, vergleiche es mit einem webbrowser, mein PC liegt aber um einiges falsch oO :D
    Aber ich habe eine Frage, wie berechnest du mit

    Quellcode

    1. TimeOffset = time - Now
    den Unterschied der zeit ?
    Bis jetzt habe ich das immer mit

    Quellcode

    1. Dim Time1 As Date = linestring1
    2. Dim Time2 As Date = Now.Hour & ":" & Now.Minute & ":" & Now.Second
    3. Dim di As DateInterval = DateInterval.Second
    4. If DateDiff(di, Time1, Time22) <= 0 Then
    5. ...
    6. end if


    gemacht. linestring1 wird vom Server geladen, ist also eine Uhrzeit.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Trunk“ ()

    Time ist die Uhrzeit die ich online ausgelesen habe. Now ist die Uhrzeit die auf deinem Rechner läuft. Wenn du Uhrzeiten subtrahierst bekommst du eine TimeSpan - also eine Zeitspanne. Diese Zeitspanne ist der Unterschied zwischen Online-Uhr und Windows-Uhr. Da beide Uhren ja gleichschnell laufen kannst du zu jedem beliebigen Zeitpunkt (theoretisch) den Unterschied auf die Windows-Zeit draufrechnen (Uhrzeit + Zeitspanne = Uhrzeit) und kommst wieder auf die OnlineZeit.

    Schau dir mal den MSDN-Artikel zur DateKlasse und TimeSpan Klasse an. Unglaublich, was man da alles machen kann!

    btw: Option Strict ON!
    vor allem hier kannst du sonst sehr schnell fehler einbauen die erst irgendwann auffallen
    Danke für die erklärung, jedoch bekomme ich als ergebnis, nachdem ich Timeoffset in String konvertiere so ein ergebnis

    -00:00:09.1845703

    das negative steht für den Abstand, ist die hintere Kommazahl also eine nachkommastelle der .. :09 ?