我正在查看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
由于
答案 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);
获得原始公式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)
感谢大家的帮助。在浏览了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个小时。