2009-02-12 2 views
10

Я работал над разбором закладок из файла экспорта, созданного закладок Google. Этот файл содержит следующие атрибуты даты:Google Bookmark Экспорт формата даты?

ADD_DATE = "1231721701079000"

ADD_DATE = "1227217588219000"

Это не стандартные метки времени в стиле Unix. Может ли кто-нибудь указать мне в правильном направлении? Я буду разбирать их с помощью C#, если вы чувствуете, что действительно помогаете мне.

ответ

5

1231721701079000 выглядит подозрительно, как время с 1 января 1970 года в микросекундах.

perl -wle 'print scalar gmtime(1231721701079000/1_000_000)' 
Mon Jan 12 00:55:01 2009 

Я бы сделал несколько закладок в известное время и попробовал его, чтобы подтвердить.

+0

@Lothar Это тавтологическое заявление? – Schwern

+0

Нет, пришло время с 1 января 1970 года в _micro_ seconds – mgkrebbs

+0

@mgkrebbs Вы правы! Исправлена. Скажи привет Доби! – Schwern

1

Первоначально глядя на него, он выглядит почти как если бы вы отрубили последние 6 цифр вы получите разумный Unix Дата использования online converter

1231721701 = пн, 12 января 2009 00:55:01 GMT

1227217588 = чт, 20 ноября 2008 21:46:28 GMT

лишние 6 цифр может быть форматированием родственными или какие-то расширенные атрибуты.

Существует пример кода для conversion of Unix Timestamps, если это на самом деле то, что есть.

+0

Schwern был правильным, но я дал вам проголосовать за ссылку, которая является код, который я использовал для преобразования UniX метки времени. –

+0

да, согласен. Я не учитывал миллисекунды –

1

смотрите здесь образцы кода: http://www.epochconverter.com/#code

// мой заводной (Java) код, наконец, вышел, как:

четкости convertDate (DEF эпохи)

{

long dv = epoch/1000; // divide by 1,000 to avoid milliseconds 

String dt = new java.text.SimpleDateFormat("dd/MMM/yyyy HH:mm:ss").format(new java.util.Date (dv)); 

// получить эпоху date:

// long epoch = new java.text.Simp leTate() * 1000;

return dt; 

} // конец опр

Так светлячок дата закладки экспортироваться как JSON дал мне:

json.lastModified: 1366313580447014

новообращенный с даты эпохи: 18/апрель/2013 21:33:00

от:

Println «конвертировать из EPO ch date: "+ convertDate (json.lastModified)

13

Chrome использует измененную форму формата времени Windows (« Windows epoch ») для своих временных меток, как в файле Bookmarks, так и в файлах истории. Формат времени Windows - это число 100 нс с 1 января 1601 года. Формат Chrome - это количество микросекунд с той же даты и, следовательно, 1/10 таких же размеров.

Чтобы преобразовать временную метку Chrome в эпоху Unix и из нее, вы должны преобразовать ее в секунды и компенсировать разницу между двумя базовыми датами (11644473600).

Вот формулы преобразования для Unix, JavaScript (Unix в миллисекундах), Windows, и временные метки Chrome (вы можете изменить +/× и -/÷, но вы потеряете немного точности):

u : Unix  timestamp eg: 1378615325 
j : JavaScript timestamp eg: 1378615325177 
c : Chrome  timestamp eg: 13902597987770000 
w : Windows timestamp eg: 139025979877700000 

u = (j/1000) 
u = (c - 116444736000000) /10000000 
u = (w - 1164447360000000)/100000000 

j = (u * 1000) 
j = (c - 116444736000000) /10000 
j = (w - 1164447360000000)/100000 

c = (u * 10000000)   + 116444736000000 
c = (j * 10000)    + 116444736000000 
c = (w/10) 

w = (u * 100000000)   + 1164447360000000 
w = (j * 100000)   + 1164447360000000 
w = (c * 10) 

Обратите внимание, что это довольно большие цифры, поэтому вам нужно будет использовать 64-битные номера или же обрабатывать их как строки, подобные PHP-модулю BC-math.

+0

Но ответ об экспорте 'bookmarks_mm.dd.yyyy.html' http://fileformats.archiveteam.org/wiki/Chrome_bookmarks – Alex78191

2

Eureka! Я вспомнил, что прочитал значение ADD_DATE на каком-то веб-сайте, но до сегодняшнего дня я не смог найти его снова.

http://MSDN.Microsoft.com/en-us/library/aa753582(v=vs.85).aspx

предлагает такое объяснение, как «Примечание» как раз перед заголовком «Экспорт и импорт»:

«На протяжении всего этого файла [-] определение формата, {дата} представляет собой десятичное целое число, которое представляет количество секунд, прошедших с полуночи 1 января 1970 года. «

Bef руды, что примеры {даты} были показаны:

<DT> < Н3 СЛОЖЕННАЯ ADD_DATE = "{дата}" > {название} </Н3 > ...

и

<DT> < A HREF = "{url}" ADD_DATE = "{date}" LAST_VISIT = "{date}" LAST_MODIFIED = "{date}" > {название} </A > ...

Когда-нибудь, я буду писать VBA макрос, чтобы преобразовать их в узнаваемых даты, но не сегодня!

Если кто-то другой сначала пишет сценарий конверсии, поделитесь им. Благодарю.

4

В JavaScript код будет выглядеть следующим образом

function chromeDtToDate(st_dt) { 
    var microseconds = parseInt(st_dt, 10); 
    var millis = microseconds/1000; 
    var past = new Date(1601, 0, 1).getTime(); 
    return new Date(past + millis); 
} 
+0

Это ответ о' bookmarks_mm.dd.yyyy.html', а не о 'Bookmarks [. JSON] '. – Alex78191