<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />El reloj de su computadora le muestra la hora de su zona horaria local.Probablemente conozca su zona horaria mediante un código de tres letras como EST (hora estándar del este) o EDT (hora de verano del este) o tal vez GMT (hora media de Greenwich).GMT tiene varios otros nombres: UTC es un compromiso acrónimo de científicos y zulú es una designación militar (Z, de cero).
GMT tiene un desplazamiento de cero; EDT es GMT-4 y EST es GMT-5. Esta publicación trata sobre calcular el valor -4 o -5, en un script JSL, sin saber en qué zona horaria se encuentra su computadora.Una vez que tenga ese valor, puede convertir los valores de fecha y hora JMP de la hora local a GMT.Si recopila y comparte datos entre zonas horarias, GMT podría ser una buena opción.
En lugar de intentar realizar una llamada al sistema a través de la interfaz JSL-DLL, voy a preguntar en un sitio web cuál es la hora GMT actual.Esto será parte de la información del encabezado en la respuesta del sitio web.
(Hay un archivo adjunto JSL, a continuación, con un poco más de verificación de errores de lo que ve aquí).
(Si hay una discontinuidad temporal a continuación, es porque esta publicación se construyó durante varias horas).
(Los sockets JSL NO admiten conexiones SSL o HTTPS.Puede utilizar internetOpen() para la mayoría de los trabajos HTTPS).
(Probado sólo en EDT hasta el momento.Cuéntame qué descubres.)
Primero, cree un socket JSL y conéctese a un sitio 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...
{"conectar", "ok"}
los métodos de socket, como < , devolver una lista.El primer valor de la lista repite el nombre del método y el segundo valor es un código de retorno, "ok" arriba.Esta conexión permanecerá viva durante aproximadamente un minuto, esperando que usted solicite algo.Preguntemos por la página raíz del sitio 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() );
{"Enviar", "ok", Char To Blob( "", "ascii~hex" )}
Otro código de retorno correcto, ¡genial!Ahora obtengamos el resultado:
// 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 a Blob(
"HTTP/1.1 301 movido permanentemente~0D~0ADeta: viernes, 30 de octubre de 2015 16:57:43 GMT~0D~0AServidor: Apache~0D~0ALubicación: http://www.jmp.com/~0D~0AContent-Length: 227~0D~0AConexión: cerrar~0D~0ATipo de contenido: texto/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 Movido permanentemente< /title>~0A~0A
Movido permanentemente
~0AEl documento se ha movido http://www.jmp.com/~22 >aquí.
~0A~0A","ascii~hexadecimal"
)
Están sucediendo muchas cosas allí.Sólo concéntrate en el ~0D~0ADeta: viernes, 30 de octubre de 2015 16:57:43 GMT~0D~0A parte enterrada en los datos recibidos.(Son las 12:57 hora local (EDT).) expresión regular escogerá la fecha:
GMT = Informat( Regex( Char( receivedData ), "~0D~0ADate: [A-Za-z]+, (.*?) GMT~0D~0A", "\1" ) );
30oct2015:16:57:43
Convierta a un desplazamiento de zona horaria, puede agregar un signo menos si tiene sentido...
tz = Round( (GMT - localTime) / In Hours( 1 ), 3 );
4
(Si construye un sistema de producción en torno a esto, considere formas alternativas de validar este número.No hay garantía de que un sitio web tenga la hora correcta o esté disponible).
Entonces, sabiendo que el reloj de mi computadora es GMT-4, puedo agregar 4 a la hora local y tener GMT:
Format( Today() + In Hours( tz ), "y/m/d h:m:s" )
"30/10/2015 17:05:33"
InHours convierte las 4 horas (en tz) a segundos para que puedan agregarse al valor de fecha y hora (también en segundos) y luego formatearse.Aquí es poco más de la una; Veo que mis compañeros de trabajo del Reino Unido ya se dirigen a casa para pasar el fin de semana.
La próxima vez: el mapa día/noche.
