【发布时间】:2016-08-24 10:13:29
【问题描述】:
我正在编写一些 bash 脚本,用于解析和修改 OS X 中 Google Chrome 的多个首选项和书签。其中一些值需要提供 17 位 WebKit 时间戳。现在我已经用13116319200000000 对其进行了硬编码,这对应于我本周一在 CEST 开始的工作日,但如果能以某种方式从当前系统时间计算出来,那就太好了,因为脚本将在不同的时间部署。
WebKit 时间戳是自 1601 年 1 月 1 日 00:00 UTC 以来的 64 位微秒值。 OS X 上的 bash 中的这种转换可能是不可能的,因为 @987654323 的内置版本@ 不支持高于一秒的分辨率(如%N),但也许一些高度智能的数学可以做到。
无论如何,我已经在网上搜索并找到了多个关于如何将此类时间戳转换为人类可读时间的示例,但反之则不然。最好的例子是this website,它列出了一些 dpcnull 用户的 python 脚本:
import datetime
def date_from_webkit(webkit_timestamp):
epoch_start = datetime.datetime(1601,1,1)
delta = datetime.timedelta(microseconds=int(webkit_timestamp))
print epoch_start + delta
inTime = int(raw_input('Enter a Webkit timestamp to convert: '))
date_from_webkit(inTime)
并且在表单的操作上也有这个 JavaScript(document.we.wk.value 指向那个表单):
function WebkitToEpoch() {
var wk = document.we.wk.value;
var sec = Math.round(wk / 1000000);
sec -= 11644473600;
var datum = new Date(sec * 1000);
var outputtext = "<b>Epoch/Unix time</b>: " + sec;
outputtext += "<br/><b>GMT</b>: " + datum.toGMTString() + "<br/><b>Your time zone</b>: " + datum.toLocaleString();
$('#resultle1').html(outputtext);
}
看起来很容易倒过来,但我尝试失败了。
有趣的是,该站点显示当前 WebKit 时间戳,但经过检查,我相信它是在服务器级别用 PHP 计算的,因此无法访问它。
如果有人可以帮助我编写可以嵌入我的脚本,我会很高兴。
注意: 虽然谷歌浏览器使用精确到微秒的所有 17 位数字,但我真的不需要这样的分辨率。就像在链接的网站上一样,四舍五入到秒,最后六位数字为零是完全可以的。唯一重要的因素 - 它必须正确计算。
【问题讨论】:
标签: javascript python bash google-chrome webkit