<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 请求。