2

我正在查看 Google Chrome 用于已安装扩展的首选项文件,似乎 install_time 以一种奇怪的格式存储。

以下是文件中的一些示例日期:

"install_time": "13018473436573431",

"install_time": "13018473437125431",
"lastpingday": "13024047600974141",

它不会在 C# 应用程序中转换为 DateTime,而且它似乎不是普通的 javascript 日期(这些只有 13 个数字)。

它是17个数字真的很奇怪。

这是一些额外的调试信息,我在尝试调用 new DateTime("install_date") 时输出日期和数字本身。

Program  Entry:
Ext Name: Clock
install_time: 1/2/0001 12:10:40 PM
install_time raw data: 13024070300259446
install_time (long):   13024070300259446

Program  Entry:
Ext Name: Googulator
install_time: 1/2/0001 12:10:40 PM
install_time raw data: 13024076154792655
install_time (long):   13024076154792655

Program  Entry:
Ext Name: Google News
install_time: 1/2/0001 12:10:40 PM
install_time raw data: 13024076389301659
install_time (long):   13024076389301659

Program  Entry:
Ext Name: Spotify - Music for every moment
install_time: 1/2/0001 12:10:40 PM
install_time raw data: 13024076418505659
install_time (long):   13024076418505659

谢谢

4

2 回答 2

2

好的,我想我可能已经算出来了,嗯,它肯定会产生今天的日期,如果时间加起来,你需要算出来。考虑以下 javascrpt:

var installTime = 13024070300259446;
var convertedTime = ( installTime - 11644473600000000 ) / 1000 ;//divide by 1000 because we are going to add milliseconds on to the base date
var date = new Date(convertedTime);
alert(date);

这是一个工作示例

原始公式是从这里获得的:

参考 OP 中的历史 SQL 语句,可以对其进行一些修改以从时间戳中获取一些人类可读的输出。如前所述,时间戳采用 Webkit 格式,因此需要进行一些调整才能获得可理解的内容。

选择 urls.url, urls.title, urls.visit_count, urls.typed_count, datetime(((urls.last_visit_time-11644473600000000)/1000000),'unixepoch','localtime') 作为 last_visit_time, urls.hidden, datetime((( visit.visit_time-11644473600000000)/1000000),'unixepoch','localtime') as visit_time,visits.from_visit,visits.transition FROM urls,访问WHERE urls.id = visit.url

但是,最初的尝试/ 1000000没有成功,所以我尝试了/ 1000,结果确实奏效了!(请参阅下面的编辑,了解为什么这不起作用)


为了完整起见,因为您专门使用了 C# 标记,所以这里是 C# 版本:

long installTime = 13024070300259446;
long convertedTime = ( installTime - 11644473600000000 ) / 1000000 ;//divide by 1000000 because we are going to add Seconds on to the base date
DateTime date = new DateTime(1970,1,1,0,0,0,0);
date = date.AddSeconds(convertedTime);
Console.WriteLine(date);

编辑:看到加勒特的回答后,很清楚为什么我必须在我的 javascript 示例中除以 1000 而他在他的 C# 示例中除以 1000000。因为 javascript 代码将毫秒添加到基准日期,而 C# 仅将秒添加到基准日期。(注意:我已经更新了我的 C# 代码以反映这一点)

于 2013-09-19T16:09:33.723 回答
0

从 Webkit 时间转换为 DateTime

谢谢大家的帮助。在浏览了 musefan 链接的有用链接后,我得到了答案。它与musefan的有点不同。我还添加了注释以增加清晰度,以防万一将来有人需要帮助。

这是我使用的 Musefan 的来源:http: //linuxsleuthing.blogspot.co.uk/2011/06/decoding-google-chrome-timestamps-in.html

        //The install time was 12:20 PM
        long rawTime = 13024081249872950;
        //Subtract the amount of seconds from 1601 to 1970.
        long convertedTime = (rawTime - 11644473600000000);
        //Devide by 1000000 to convert the remaining time to seconds.
        convertedTime = convertedTime / 1000000;
        //Set up a date at the traditional starting point for unix time.
        DateTime normalDate = new DateTime(1970, 1, 1, 0, 0, 0, 0);
        //Add the seconds we calculated above.
        DateTime googleDate = normalDate.AddSeconds(convertedTime);
        //Finally we have the date.
        System.Diagnostics.Debug.WriteLine("Final Date: " + googleDate.ToString());

输出:

最终日期:2013 年 9 月 19 日下午 4:20:49

从格林威治标准时间-5 开始(东部时间)似乎有 4 小时的休息时间。

于 2013-09-20T13:21:05.670 回答