Google书签导出日期格式?

问题描述 投票:13回答:7

我一直在努力解析谷歌书签生成的导出文件中的书签。该文件包含以下日期属性:

ADD_DATE = “1231721701079000”

ADD_DATE = “1227217588219000”

这些不是标准的unix样式时间戳。有人能指出我在正确的方向吗?我会用c#解析它们,如果你真的想帮我解决的话。

date formatting export bookmarks
7个回答
7
投票

1231721701079000自1970年1月1日起以微秒为单位看起来像时间。

perl -wle 'print scalar gmtime(1231721701079000/1_000_000)'
Mon Jan 12 00:55:01 2009

我会在已知的时间制作一些书签并尝试确认。


15
投票

Chrome使用修改后的Windows时间格式(“Windows epoch”)作为时间戳,包括Bookmarks文件和历史文件。 Windows时间格式是自1601年1月1日以来100ns-es的数量.Chrome格式是自同一日期以来的微秒数,因此大1/10。

要将Chrome时间戳转换为Unix纪元,请转换为秒并补偿两个基本日期时间之间的差异(11644473600)。

这是Unix的转换公式,JavaScript(以毫秒为单位的Unix),Windows和Chrome时间戳(你可以重新排列+ /×和 - /÷,但是你会失去一点精度):

u :  Unix       timestamp    eg: 1378615325
j :  JavaScript timestamp    eg: 1378615325177
c :  Chrome     timestamp    eg: 13902597987770000
w :  Windows    timestamp    eg: 139025979877700000

u =  (j / 1000)
u =  (c - 116444736000000)   / 10000000
u =  (w - 1164447360000000)  / 100000000

j =  (u * 1000)
j =  (c - 116444736000000)   / 10000
j =  (w - 1164447360000000)  / 100000

c =  (u * 10000000)          + 116444736000000
c =  (j * 10000)             + 116444736000000
c =  (w / 10)

w =  (u * 100000000)         + 1164447360000000
w =  (j * 100000)            + 1164447360000000
w =  (c * 10)

请注意,这些都是非常大的数字,因此您需要使用64位数字,或者将其作为字符串处理,就像使用PHP的BC-math模块一样。


5
投票

在Javascript中代码看起来像这样

function chromeDtToDate(st_dt) {
   var microseconds = parseInt(st_dt, 10);
   var millis = microseconds / 1000;
   var past = new Date(1601, 0, 1).getTime();
   return new Date(past + millis);
}

3
投票

找到了!我记得在某个网站上读过ADD_DATE的含义,但直到今天,我再也找不到了。

http://MSDN.Microsoft.com/en-us/library/aa753582(v=vs.85).aspx

在“出口和进口”标题之前将此解释作为“注释”提供:

“在整个文件[ - ]格式定义中,{date}是一个十进制整数,表示自1970年1月1日午夜以来经过的秒数。”

在此之前,显示了{date}的示例:

<DT> <H3 FOLDED ADD_DATE =“{date}”> {title} </ H3> ...

<DT> <A HREF="{url}" ADD_DATE="{date}" LAST_VISIT="{date}" LAST_MODIFIED="{date}"> {title} </A> ......

总有一天,我会编写一个VBA宏来将这些转换为可识别的日期,但今天不行!

如果其他人先写了转换脚本,请分享。谢谢。


1
投票

最初看看它,看起来如果你砍下最后6位数字你会得到一个合理的Unix日期使用online converter

1231721701 =星期一,2009年1月12日00:55:01 GMT

1227217588 =周四,2008年11月20日21:46:28 GMT

额外的6位数字可以是格式化相关或某种扩展属性。

conversion of Unix Timestamps有一些示例代码,如果事实上它是什么。


1
投票

在这里查看代码示例:http://www.epochconverter.com/#code

//我的groovy(java)代码终于出现了:

def convertDate(def epoch)

{

long dv = epoch / 1000; // divide by 1,000 to avoid milliseconds

String dt = new java.text.SimpleDateFormat("dd/MMM/yyyy HH:mm:ss").format(new java.util.Date (dv));

//获取纪元日期:

// long epoch = new java.text.SimpleDateFormat(“MM / dd / yyyy HH:mm:ss”)。parse(“01/01/1970 01:00:00”)。getTime()* 1000;

return dt;

} //结束def

所以导出为json的firefox书签日期给了我:

json.lastModified:1366313580447014

转换日期:18 / Apr / 2013 21:33:00

来自:

println“从纪元日期转换:”+ convertDate(json.lastModified)


0
投票

截至最新的Chrome版本73.0.3683.86(官方版本)(64位):

  • 当我导出书签时,我得到了一个像“bookmarks_3_22_19.html”这样的html文件。
  • 每个项目都有一个'add_date'字段,其中包含日期字符串。像这样:
<a href="https://stackoverflow.com" add_date="1553220774" icon="">Stack Overflow</a>
  • 这个时间戳实际上是1970年1月1日以来的秒数(不是微秒)。所以我们可以用Javascript解析它,如下面的代码:
function ChromeTimeToDate(timestamp) {
   var seconds = parseInt(timestamp, 10);
   var dt = new Date();
   dt.setTime(seconds * 1000);
   return dt;
}
  • 对于上面的示例链接,我们可以调用ChromeTimeToDate('1553220774')来获取Date。
ChromeTimeToDate('1553220774')
12:09:03.263 Fri Mar 22 2019 10:12:54 GMT+0800 (Australian Western Standard Time)
© www.soinside.com 2019 - 2024. All rights reserved.