<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Die Uhr Ihres Computers zeigt Ihnen die Zeit für Ihre lokale Zeitzone an.Wahrscheinlich kennen Sie Ihre Zeitzone als dreistelligen Code wie EST (Eastern Standard Time) oder EDT (Eastern Daylight Time) oder vielleicht GMT (Greenwich Mean Time).GMT hat mehrere andere Namen: UTC ist a Kompromiss Akronym für Wissenschaftler und Zulu ist eine militärische Bezeichnung (Z, für Null).
GMT hat einen Offset von Null; EDT ist GMT-4 und EST ist GMT-5. In diesem Beitrag geht es darum, den Wert -4 oder -5 in einem JSL-Skript zu berechnen, ohne zu wissen, in welcher Zeitzone sich Ihr Computer befindet.Sobald Sie diesen Wert haben, können Sie JMP-Datumszeitwerte von Ortszeit in GMT umwandeln.Wenn Sie Daten über Zeitzonen hinweg sammeln und teilen, ist GMT möglicherweise eine gute Wahl.
Anstatt zu versuchen, einen Systemaufruf über die JSL-DLL-Schnittstelle durchzuführen, werde ich eine Website nach der aktuellen GMT-Zeit fragen.Dies wird Teil der Header-Informationen in der Antwort der Website sein.
(Unten ist ein JSL-Anhang mit etwas mehr Fehlerprüfung als hier zu sehen.)
(Wenn es unten eine zeitliche Diskontinuität gibt, liegt das daran, dass dieser Beitrag über mehrere Stunden hinweg erstellt wurde.)
(JSL-Sockets unterstützen KEINE SSL- oder HTTPS-Verbindungen.Sie können internetOpen() für die meisten HTTPS-Arbeiten verwenden.)
(Bisher nur in EDT getestet.Lassen Sie mich wissen, was Sie entdecken.)
Erstellen Sie zunächst einen JSL-Socket und stellen Sie eine Verbindung zu einer Website her:
// open a socket connection to a web sitetCall = Socket();RC = tcall << connect( "www.jmp.com", "80" ); // pretty much any site will work. this is a short redirect answer...
{"verbinden", "ok"}
die Socket-Methoden, wie < , eine Liste zurückgeben.Der erste Wert in der Liste wiederholt den Methodennamen, und der zweite Wert ist ein Rückgabecode, „ok“ oben.Diese Verbindung bleibt etwa eine Minute lang bestehen und wartet darauf, dass Sie um etwas bitten.Fragen wir nach der Stammseite der Website:
// request the root page of the siteRC = tcall << Send( Char To Blob( "GET / HTTP/1.0~0d~0a~0d~0a", "ASCII~HEX" ) );// grab the local time between sending the request and getting the responselocalTime = As Date( Today() );
{"Senden", "ok", Char To Blob( "", "ascii~hex" )}
Ein weiterer OK-Rückgabecode, großartig!Lassen Sie uns nun das Ergebnis abrufen:
// prepare a buffer to collect the resultsreceivedData = charToblob("");while(RC[2] == "ok", // a loop to receive data RC = tCall << Recv( 1000 ); // receive up to 1000 bytes at a time if( RC[2] == "ok", receivedData ||= rc[3]; ); // concatenate if got some);Zeichen zu Blob (
„HTTP/1.1 301 Permanent verschoben~0D~0ADatum: Freitag, 30. Okt. 2015 16:57:43 GMT~0D~0AServer: Apache~0D~0AOrt: http://www.jmp.com/~0D~0AInhaltslänge: 227~0D~0AConnection: close~0D~0AContent-Type: text/html; charset=iso-8859-1~0D~0ASet-Cookie: BIGipServerwww.jmp.com-pool=201698709.20480.0000; path=/~0D~0A~0D~0A<~21DOCTYPE HTML PUBLIC ~22-//IETF//DTD HTML 2.0//EN~22>~0A~0A301 Moved Permanently< /title>~0A~0A
Dauerhaft verschoben
~0ADas Dokument wurde verschoben http://www.jmp.com/~22 >hier.
~0A~0A","ascii~hex"
)
Da ist viel los.Konzentrieren Sie sich einfach auf die ~0D~0ADatum: Freitag, 30. Oktober 2015 16:57:43 GMT~0D~0A Teil in den ReceivedData vergraben.(Es ist 12:57 Ortszeit (EDT).) A Regex wählt das Datum aus:
GMT = Informat( Regex( Char( receivedData ), "~0D~0ADate: [A-Za-z]+, (.*?) GMT~0D~0A", "\1" ) );
30. Okt. 2015: 16:57:43
Konvertieren Sie in einen Zeitzonen-Offset, Sie können ein Minus hinzufügen, wenn es sinnvoll ist ...
tz = Round( (GMT - localTime) / In Hours( 1 ), 3 );
4
(Wenn Sie ein Produktionssystem darum herum aufbauen, ziehen Sie alternative Möglichkeiten in Betracht, diese Nummer zu validieren.Es gibt keine Garantie dafür, dass eine Website die richtige Zeit hat oder verfügbar ist.)
Wenn ich also weiß, dass meine Computeruhr GMT-4 ist, kann ich 4 zu einer Ortszeit addieren und habe GMT:
Format( Today() + In Hours( tz ), "y/m/d h:m:s" )
"30.10.2015 17:05:33"
InHours wandelt die 4 Stunden (in tz) in Sekunden um, sodass sie zum Datum-Uhrzeit-Wert (ebenfalls in Sekunden) hinzugefügt und dann neu formatiert werden können.Hier ist es kurz nach eins; Wie ich sehe, sind meine britischen Kollegen bereits für das Wochenende nach Hause gefahren.
Das nächste Mal: die Tag/Nacht-Karte.
