我正在编写一些bash脚本,用于解析和修改OS X中Google Chrome的多个首选项和书签。某些值需要提供17位WebKit时间戳。现在,我已经用13116319200000000
CEST对其进行了硬编码,该编码对应于本周一在CEST的工作日开始,但是最好以某种方式从当前系统时间进行计算,因为脚本将在不同的时间进行部署。
WebKit时间戳是自1601年1月1日00:00 UTC以来的64位微秒值。在OS X上以bash进行这种转换可能是不可能的,因为的内置版本data
不支持高于一秒的分辨率(例如%N
),但是也许某些高智能的数学可以做到。
无论如何,我已经在网上搜索并找到了多个示例,这些示例说明了如何将这种时间戳转换为人类可读的时间,但并非相反。最好的例子是这个网站,该网站列出了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计算的,因此无法访问它。
如果有人可以帮助我完成我可以嵌入到我的脚本中的工作,我将感到非常高兴。
注意: 尽管Google Chrome浏览器使用的所有17位数字都具有精确的微秒,但我实际上并不需要这种分辨率。就像在链接的网站上一样,四舍五入到秒,最后六位数字为零是完全可以的。唯一重要的因素-必须正确计算。
像这样吗?
from datetime import datetime, timedelta
def date_from_webkit(webkit_timestamp):
epoch_start = datetime(1601, 1, 1)
delta = timedelta(microseconds=int(webkit_timestamp))
return epoch_start + delta
def date_to_webkit(date_string):
epoch_start = datetime(1601, 1, 1)
date_ = datetime.strptime(date_string, '%Y-%m-%d %H:%M:%S')
diff = date_ - epoch_start
seconds_in_day = 60 * 60 * 24
return '{:<017d}'.format(
diff.days * seconds_in_day + diff.seconds + diff.microseconds)
# Webkit to date
date_from_webkit('13116508547000000') # 2016-08-24 10:35:47
# Date string to Webkit timestamp
date_to_webkit('2016-08-24 10:35:47') # 13116508547000000
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句