<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />L'horloge de votre ordinateur vous indique l'heure de votre fuseau horaire local.Vous connaissez probablement votre fuseau horaire sous la forme d'un code à trois lettres comme EST (Eastern Standard Time) ou EDT (Eastern Daylight Time) ou peut-être GMT (Greenwich Mean Time).GMT a plusieurs autres noms : UTC est un compromis acronyme de scientifiques et zoulou est une désignation militaire (Z, pour zéro).
GMT a un décalage de zéro ; EDT est GMT-4 et EST est GMT-5. Cet article concerne le calcul de la valeur -4 ou -5, dans un script JSL, sans savoir dans quel fuseau horaire se trouve votre ordinateur.Une fois que vous avez cette valeur, vous pouvez convertir les valeurs date-heure JMP de l'heure locale à l'heure GMT.Si vous collectez et partagez des données sur plusieurs fuseaux horaires, GMT peut être un bon choix.
Plutôt que d'essayer de passer un appel système via l'interface JSL-DLL, je vais demander à un site Web quelle est l'heure GMT actuelle.Cela fera partie des informations d'en-tête dans la réponse du site Web.
(Il y a une pièce jointe JSL, ci-dessous, avec un peu plus de vérification des erreurs que vous ne voyez ici.)
(S'il y a une discontinuité temporelle en dessous, c'est que ce poste a été construit sur plusieurs heures.)
(Les sockets JSL ne prennent PAS en charge les connexions SSL ou HTTPS.Vous pouvez utiliser internetOpen() pour la plupart des travaux HTTPS.)
(Testé uniquement en EDT jusqu'à présent.Faites-moi savoir ce que vous découvrez.)
Tout d'abord, créez un socket JSL et connectez-vous à un site 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...
{"connecter", "d'accord"}
les méthodes socket, comme < , renvoie une liste.La première valeur de la liste répète le nom de la méthode et la deuxième valeur est un code de retour, "ok" ci-dessus.Cette connexion restera active pendant environ une minute, attendant que vous demandiez quelque chose.Demandons la page racine du site 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() );
{"Envoyer", "ok", Car vers Blob( "", "ascii~hex" )}
Un autre code de retour ok, génial !Maintenant, obtenons le résultat :
// 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);Car à blob(
"HTTP/1.1 301 déplacé définitivement~0D~0ADate : ven. 30 octobre 2015 16:57:43 GMT~0D~0AServeur : Apache~0D~0AEmplacement : http://www.jmp.com/~0D~0AContent-Length : 227~0D~0AConnexion : 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 déplacé définitivement< /title>~0A~0A
Déplacé définitivement
~0ALe document a été déplacé http://www.jmp.com/~22 >ici.
~0A~0A","ascii~hex"
)
Il se passe beaucoup de choses là-bas.Concentrez-vous simplement sur le ~0J~0ADate : ven. 30 oct. 2015 16:57:43 GMT~0D~0A partie enfouie dans les données reçues.(Il est 12 h 57, heure locale (HAE).) Regex choisira la date :
GMT = Informat( Regex( Char( receivedData ), "~0D~0ADate: [A-Za-z]+, (.*?) GMT~0D~0A", "\1" ) );
30oct2015:16:57:43
Convertir en un décalage de fuseau horaire, vous pouvez ajouter un moins si cela a du sens...
tz = Round( (GMT - localTime) / In Hours( 1 ), 3 );
4
(si vous construisez un système de production autour de cela, envisagez d'autres moyens de valider ce numéro.Il n'y a aucune garantie qu'un site Web aura l'heure correcte ou sera disponible.)
Donc, sachant que l'horloge de mon ordinateur est GMT-4, je peux ajouter 4 à une heure locale et avoir GMT :
Format( Today() + In Hours( tz ), "y/m/d h:m:s" )
"2015/10/30 17:05:33"
InHours convertit les 4 heures (en tz) en secondes afin qu'elles puissent être ajoutées à la valeur date-heure (également en secondes) puis reformatées.C'est juste après une heure ici; Je vois que mes collègues britanniques rentrent déjà chez eux pour le week-end.
La prochaine fois : la carte jour/nuit.
