<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />L'orologio del tuo computer mostra l'ora del 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 ottenuto questo valore, puoi convertire i valori data-ora JMP dall'ora locale a GMT.Se raccogli e condividi dati tra fusi orari, GMT potrebbe essere una buona scelta.
Piuttosto che provare a effettuare una chiamata di sistema tramite l'interfaccia JSL-DLL, chiederò a un sito web qual è l'ora GMT attuale.Questo farà parte delle informazioni dell'intestazione nella risposta del sito web.
(C'è un allegato JSL, di seguito, con un po' più di controllo degli errori rispetto a quello che vedi qui.)
(Se c'è una discontinuità temporale qui sotto, è perché questo post è stato costruito in diverse ore.)
(I socket JSL NON supportano le connessioni SSL o HTTPS.Puoi utilizzare internetOpen() per la maggior parte del lavoro HTTPS.)
(Testato finora 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à attiva per circa un minuto, aspettando 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, fantastico!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);Carattere in BLOB(
"HTTP/1.1 301 spostato in modo permanente~0D~0AData: venerdì 30 ottobre 2015 16:57:43 GMT~0D~0AServer: Apache~0D~0APosizione: http://www.jmp.com/~0D~0ALunghezza contenuto: 227~0D~0AConnessione: chiudi~0D~0ATipo di contenuto: 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 permanentemente< /title>~0A~0A
Spostato permanentemente
~0AIl documento è stato spostato http://www.jmp.com/~22 >qui.
~0A~0A","ascii~hex"
)
C'è molto da fare lì.Concentrati solo su ~0D~0AData: venerdì 30 ottobre 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 all'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 (anch'esse 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.
