<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 为单位)转换为秒,以便可以将其添加到日期时间值(也以秒为单位),然后重新格式化。这里刚过一号;我看到我的英国同事已经回家过周末了。
下一次:日/夜地图。
