<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Die Uhr Ihres Computers zeigt Ihnen die Zeit Ihrer lokalen Zeitzone an.Sie kennen Ihre Zeitzone wahrscheinlich als dreibuchstabigen Code wie EST (Eastern Standard Time) oder EDT (Eastern Daylight Time) oder vielleicht GMT (Greenwich Mean Time).GMT hat mehrere andere Namen: UTC ist ein 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 um die Berechnung des Werts -4 oder -5 in einem JSL-Skript, ohne zu wissen, in welcher Zeitzone sich Ihr Computer befindet.Sobald Sie diesen Wert haben, können Sie JMP-Datums-/Uhrzeitwerte von der Ortszeit in GMT konvertieren.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 zu tätigen, werde ich eine Website nach der aktuellen GMT-Zeit fragen.Dies wird Teil der Header-Informationen in der Antwort der Website sein.
(Unten finden Sie einen JSL-Anhang mit etwas mehr Fehlerprüfung als hier.)
(Wenn es unten eine zeitliche Diskontinuität gibt, liegt das daran, dass dieser Beitrag über mehrere Stunden 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ückkehrcode, oben „ok“.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() );
{"Send", "ok", Char To Blob( "", "ascii~hex" )}
Ein weiterer guter Rückgabecode, großartig!Jetzt erhalten wir das Ergebnis:
// 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);Char To Blob(
„HTTP/1.1 301 dauerhaft verschoben~0D~0ADatum: Fr, 30. Okt. 2015 16:57:43 GMT~0D~0AServer: Apache~0D~0AStandort: http://www.jmp.com/~0D~0AContent-Length: 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 Permanent verschoben< /title>~0A~0A
Endgültig verschoben
~0ADas Dokument wurde http://www.jmp.com/~22 >hier.
~0A~0A",„ascii~hex“
)
Da ist viel los.Konzentrieren Sie sich einfach auf das ~0D~0ADat: Fr, 30. Okt. 2015 16:57:43 GMT~0D~0A Teil in den empfangenen Daten vergraben.(Es ist 12:57 Uhr Ortszeit (EDT).) A Regex werde das Datum auswählen:
GMT = Informat( Regex( Char( receivedData ), "~0D~0ADate: [A-Za-z]+, (.*?) GMT~0D~0A", "\1" ) );
30. Okt. 2015: 16:57:43
In einen Zeitzonenversatz umrechnen, Sie können ein Minus hinzufügen, wenn es sinnvoll ist ...
tz = Round( (GMT - localTime) / In Hours( 1 ), 3 );
4
(Wenn Sie ein Produktionssystem darauf aufbauen, ziehen Sie alternative Möglichkeiten zur Validierung dieser Zahl in Betracht.Es gibt keine Garantie dafür, dass eine Website die richtige Zeit hat oder verfügbar ist.)
Da ich also weiß, dass die Uhr meines Computers 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) addiert und dann neu formatiert werden können.Es ist hier kurz nach eins; Ich sehe, dass meine britischen Kollegen bereits über das Wochenende nach Hause fahren.
Nächstes Mal: die Tag/Nacht-Karte.
