2013-09-19 5 views
2

Я просматриваю файл настроек, который Google Chrome использует для установленных расширений, и кажется, что install_time хранится в странном формате.В каком формате устанавливаются даты установки расширения хранилища Google Chrome

Вот несколько образцов дат из файла:

"install_time": "13018473436573431", 

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

Он не превращается в DateTime в C# приложении, и это, кажется, не будет нормальным яваскрипт даты (Это только 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

Вы случайно не знаете, какие даты должны представлять? –

+0

Они должны быть примерно сегодня около часа назад. Я бы сказал около 10:45 утра 9/19/2013 по восточному времени. – Garrett

+0

Хмм, тогда это исключает микросекунды эпохи Unix –

ответ

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:

Ссылка заявление история SQL в OP, это может быть модом немного, чтобы получить некоторые человеческие считываемый выход из временных меток. Как уже отмечалось, отметки времени находятся в формате Webkit, поэтому требуется некоторая настройка, чтобы получить что-то понятное.

ВЫБОР urls.url, urls.title, urls.visit_count, urls.typed_count, даты и времени (((urls.last_visit_time-11644473600000000)/1000000), 'unixepoch', 'LocalTime') , как last_visit_time, URL-адресов. скрытый, datetime (((посещения.visit_time-11644473600000000)/1000000), 'unixepoch', 'localtime') as visit_time, посещения.from_visit, посещения.transition ОТ URL-адресов, посещений WHERE urls.id = посещения.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); 

EDIT: Увидев ответ Гарретта, понятно, почему мне пришлось делить на 1000 в моем примере javascript, и он делит на 1000000 в своем примере на C#. Поскольку код javascript добавляет миллисекунды к базовой дате, где C# добавляет только секунды к базовой дате. (Примечание: Я обновил свой C# код, чтобы отразить это)

+0

Спасибо! https://jsfiddle.net/LaLasd0y/ (для тех, кто находят предупреждение (отвратительный lol)) –

0

Преобразование времени Webkit в DateTime

Спасибо всем за помощь.Просмотрев полезные ссылки, связанные с мусефаном, я смог получить ответ. Это немного отличается от мусефана. Я также добавил комментарии для дополнительной ясности, на случай, если кому-то понадобится помощь в этом в будущем.

Вот источник 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()); 

Выход:

Final Дата: 9/19/2013 4:20:49 PM

Это, кажется, 4 часа от -5 по Гринвичу (восток).

+1

Ах, поэтому деление на 1000000 работает на C#. Это должно быть потому, что пример javascript, который я использовал, работал с миллисекундами, а не секундами – musefan

+1

Просто для справки, вот как можно преобразовать DateTime в дату Webkit. TimeSpan span = (date - new DateTime (1970, 1, 1, 0, 0, 0, 0)); return ((long) span.TotalSeconds * 1000000) + 11644473600000000; – Garrett

Смежные вопросы