<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />L'orologio del tuo computer mostra l'ora del tuo fuso orario locale.Probabilmente conosci il tuo fuso orario come un codice di tre lettere come EST (Eastern Standard Time) o EDT (Eastern Daylight Time) o forse GMT (Greenwich Mean Time).GMT ha molti altri nomi: UTC è a compromesso acronimo di scienziati e Zulu è una designazione militare (Z, per zero).
GMT ha un offset pari a zero; EDT è GMT-4 e EST è GMT-5. Questo post riguarda il calcolo del valore -4 o -5, in uno script JSL, senza sapere in quale fuso orario si trova il tuo computer.Una volta che hai quel valore, puoi convertire i valori data-ora di JMP dall'ora locale a GMT.Se raccogli e condividi dati tra fusi orari, GMT potrebbe essere una buona scelta.
Piuttosto che tentare di effettuare una chiamata di sistema tramite l'interfaccia JSL-DLL, chiederò a un sito Web qual è l'ora GMT corrente.Questo farà parte delle informazioni di intestazione nella risposta del sito web.
(C'è un allegato JSL, sotto, con un po' più di controllo degli errori di quello che vedi qui.)
(Se c'è una discontinuità temporale sotto, è perché questo post è stato costruito in diverse ore.)
(I socket JSL NON supportano connessioni SSL o HTTPS.Puoi usare internetOpen() per la maggior parte dei lavori HTTPS.)
(Finora testato solo in EDT.Fammi sapere cosa scopri.)
Innanzitutto, crea un socket JSL e connettiti a un sito web:
// 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...
{"connetti", "ok"}
i metodi socket, come < , restituisce un elenco.Il primo valore nell'elenco ripete il nome del metodo e il secondo valore è un codice di ritorno, "ok" sopra.Questa connessione rimarrà viva per circa un minuto, in attesa che tu chieda qualcosa.Chiediamo la pagina principale del sito web:
// 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() );
{"Invia", "ok", Char To Blob( "", "ascii~hex" )}
Un altro codice di ritorno ok, ottimo!Ora otteniamo il risultato:
// 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);Da char a blob(
"HTTP/1.1 301 spostato in modo permanente~0D~0AData: ven, 30 ott 2015 16:57:43 GMT~0D~0AServer: Apache~0D~0ALubicazione: http://www.jmp.com/~0D~0A Lunghezza contenuto: 227~0D~0AConnessione: 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 Spostato definitivamente< /title>~0A~0A
Spostato definitivamente
~0AIl documento è stato spostato http://www.jmp.com/~22 >qui.
~0A~0A","asci~esadecimale"
)
C'è molto da fare lì.Concentrati solo sul ~0D~0AData: ven, 30 ott 2015 16:57:43 GMT~0D~0A parte sepolta nei dati ricevuti.(Sono le 12:57 ora locale (EDT).) A Regex sceglierà la data:
GMT = Informat( Regex( Char( receivedData ), "~0D~0ADate: [A-Za-z]+, (.*?) GMT~0D~0A", "\1" ) );
30 ottobre 2015:16:57:43
Converti in una differenza di fuso orario, puoi aggiungere un segno meno se ha senso ...
tz = Round( (GMT - localTime) / In Hours( 1 ), 3 );
4
(se costruisci un sistema di produzione attorno a questo, considera modi alternativi per convalidare questo numero.Non vi è alcuna garanzia che un sito web abbia l'orario corretto o sia disponibile.)
Quindi, sapendo che l'orologio del mio computer è GMT-4, posso aggiungere 4 a un'ora locale e avere GMT:
Format( Today() + In Hours( tz ), "y/m/d h:m:s" )
"30/10/2015 17:05:33"
InHours converte le 4 ore (in tz) in secondi in modo che possano essere aggiunte al valore data-ora (anche in secondi) e quindi riformattate.Qui è appena passata l'una; Vedo che i miei colleghi britannici stanno già tornando a casa per il fine settimana.
La prossima volta: la mappa giorno/notte.
