我在将存储浏览器历史记录的文件中找到的日期转换为普通DateTime时遇到了一些问题。
该文件位于:C:\ Users [username] \ AppData \ Roaming \ Mozilla \ Firefox \ Profiles [profilename] \ places.sqlite
有问题的表格是:[moz_places]
该栏目是:[last_visit_date]
我尝试过使用unix epoch和webkit格式(比如chrome使用),但都没有给我我期望的结果。
这是我的Unix转换(不工作):
public static DateTime FromUnixTime(long unixTime)
{
var epoch = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);
return epoch.AddSeconds(unixTime);
}
这是我的webkit转换代码:(也不适用于这些日期,它适用于chromes webkit日期)
public static DateTime ConvertWebkitTimeToDateTime(long ticks)
{
//Set up a date at the traditional starting point for unix time.
DateTime normalDate = new DateTime(1970, 1, 1, 0, 0, 0, 0);
//Subtract the amount of seconds from 1601 to 1970.
long convertedTime = (ticks - 11644473600000000);
//Devide by 1000000 to convert the remaining time to seconds.
convertedTime = convertedTime / 1000000;
//Add the seconds we calculated above.
normalDate = normalDate.AddSeconds(convertedTime);
//Finally we have the date.
return normalDate;
}
那么Firefox存储的这些日期是什么?以下是几个样本日期,应该是今天的日期或昨天的日期。(约10/17/2013)
1373306583389000
1373306587125000
1373306700392000
任何帮助或文档链接都会很棒,谢谢。
答案 0 :(得分:5)
Unix时间戳以秒为单位。 这些值大一百万,即它们使用的是微秒:
> select datetime(1373306583389000 / 1000000, 'unixepoch');
2013-07-08 18:03:03
答案 1 :(得分:1)
public static DateTime FromUnixTime(long unixTime)
{
unixTime = unixTime / 1000000;
var epoch = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);
return epoch.AddSeconds(unixTime);
}
CL。这是正确的,因为这只是Unix时代的毫秒值。
这是一个更详细地解释他的解决方案的资源: