Google Chrome商店扩展程序的安装日期采用何种格式

时间:2013-09-19 15:18:27

标签: c# google-chrome datetime google-chrome-extension

我正在查看Google Chrome用于已安装扩展程序的偏好设置文件,看起来install_time以奇怪的格式存储。

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

"install_time": "13018473436573431",

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

它不会转换为C#应用程序中的DateTime,它似乎不是正常的javascript日期(那些只有13个数字)。

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

这是一些额外的调试信息,我在尝试调用新的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

由于

2 个答案:

答案 0 :(得分: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);

Here is a working example

获得原始公式from here

  

参考OP中的历史SQL语句,可以稍微修改一下来获取   来自时间戳的一些人类可读输出。如前所述,   时间戳采用Webkit格式,因此需要进行一些调整   一些可理解的东西。

     

SELECT urls.url,urls.title,urls.visit_count,urls.typed_count,   日期时间(((urls.last_visit_time-116444736亿)/ 1000000),' unixepoch''本地时间')   as last_visit_time,urls.hidden,   日期时间(((visits.visit_time-116444736亿)/ 1000000),' unixepoch''本地时间')   as visit_time,visits.from_visit,visits.transition FROM urls,visits   在哪里urls.id = visits.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);

编辑:在看到Garrett的回答之后,很明显为什么我必须在我的javascript示例中除以1000并且在他的C#示例中除以1000000。因为javascript代码在基准日期上添加毫秒,因此C#只在基准日期添加秒数。 (注意:我已更新我的C#代码以反映这一点)

答案 1 :(得分: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个小时。