<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 連接。對於大多數 HTTPS 工作,您可以使用 internetOpen()。)
(到目前為止僅在 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() );
{“發送”,“確定”,字符到 Blob(“”,“ascii~hex”)}
又一個 ok 返回碼,太棒了!現在讓我們得到結果:
// 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~0AD日期:2015 年 10 月 30 日星期五 16:57:43 GMT~0D~0A 服務器:Apache~0D~0ALocation: http://www.jmp.com/~0D~0AContent-Length: 227~0D~0AConnection: 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 永久移動< /title>~0A~0A
永久移動
~0A文檔已移動 http://www.jmp.com/~22 >這裡.
~0A~0A",“ascii~hex”
)
那裡發生了很多事情。只專注於~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 為單位)轉換為秒,以便將其添加到日期時間值(也以秒為單位),然後重新格式化。就在這裡一個之後;我看到我的英國同事已經回家度週末了。
下一次:日/夜地圖。

2019 年 11 月 26 日更新: @bryan_boone有一個更簡單的版本這裡, 使用 http 請求。