<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />您的計算機時鐘顯示您當地時區的時間。您可能知道您的時區是三字母代碼,例如 EST(東部標準時間)或 EDT(東部夏令時間)或 GMT(格林威治標準時間)。GMT 還有其他幾個名稱: UTC 是妥協科學家的縮寫,祖魯語是軍事名稱(Z,零)。
GMT 的偏移量為零; EDT 為 GMT-4,EST 為 GMT-5。這篇文章是關於在 JSL 腳本中計算 -4 或 -5 值,而不知道您的計算機所在的時區。獲得該值後,您可以將 JMP 日期時間值從當地時間轉換為 GMT。如果您跨時區收集和共享數據,GMT 可能是一個不錯的選擇。
我不會嘗試通過 JSL-DLL 接口進行系統調用,而是會詢問網站當前的 GMT 時間是多少。這將是網站響應中標頭信息的一部分。
(下面有一個 JSL 附件,其中的錯誤檢查比您在這裡看到的要多一些。)
(如果下面有時間上的不連續性,那是因為這篇文章是在幾個小時內構建的。)
(JSL 套接字不支持 SSL 或 HTTPS 連接。您可以使用 internetOpen() 來完成大多數 HTTPS 工作。)
(到目前為止僅在 EDT 中進行了測試。讓我知道你發現了什麼。)
首先,創建一個 JSL 套接字並連接到一個網站:
// 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...
{“連接”,“確定”}
套接字方法,例如<<連接,返回一個列表。列表中的第一個值重複方法名稱,第二個值是返回代碼,即上面的“ok”。該連接將保持一分鐘左右,等待您提出請求。讓我們詢問網站的根頁面:
// 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() );
{"發送", "ok", Char To Blob( "", "ascii~hex" )}
另一個好的返回代碼,太棒了!現在讓我們得到結果:
// 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);字符到 Blob(
“HTTP/1.1 301 永久移動~0D~0A日期:2015 年 10 月 30 日星期五 16:57:43 GMT~0D~0A 服務器:Apache~0D~0A 位置: http://www.jmp.com/~0D~0A內容長度: 227~0D~0A連接:關閉~0D~0A內容類型: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 永久移動< /title>~0A~0A
永久移動
~0A文檔已移動 http://www.jmp.com/~22 >這裡。
~0A~0A”,“ascii~十六進制”
)
那裡發生了很多事情。只需專注於~0D~0AD日期:2015 年 10 月 30 日星期五16:57:43格林威治標準時間~0D~0A部分埋在收到的數據中。(當地時間(美國東部夏令時間)12:57。)正則表達式將選擇日期:
GMT = Informat( Regex( Char( receivedData ), "~0D~0ADate: [A-Za-z]+, (.*?) GMT~0D~0A", "\1" ) );
2015 年 10 月 30 日:16:57:43
轉換為時區偏移量,如果有意義的話可以添加減號......
tz = Round( (GMT - localTime) / In Hours( 1 ), 3 );
4
(如果您圍繞此構建生產系統,請考慮使用其他方法來驗證此數字。無法保證網站的時間正確或可用。)
因此,知道我的計算機時鐘是 GMT-4,我可以將 4 添加到本地時間並得到 GMT:
Format( Today() + In Hours( tz ), "y/m/d h:m:s" )
“2015/10/30 5:05:33 下午”
InHours 將 4 小時(以 tz 為單位)轉換為秒,以便可以將其添加到日期時間值(也以秒為單位),然後重新格式化。這裡剛過一號;我看到我的英國同事已經回家過週末了。
下一次:日/夜地圖。
