Google Bookmark Формат даты экспорта? - PullRequest
13 голосов
/ 12 февраля 2009

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

ADD_DATE = "1231721701079000"

ADD_DATE = "1227217588219000"

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

Ответы [ 7 ]

15 голосов
/ 08 сентября 2013

Chrome использует измененную форму формата времени Windows (« Эпоха Windows ») для своих временных меток, как в файле 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.

6 голосов
/ 12 февраля 2009

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

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

Я бы сделал несколько закладок в известное время и попробую их подтвердить.

5 голосов
/ 25 ноября 2015

В 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);
}
3 голосов
/ 10 января 2014

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

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

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

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

До этого были показаны примеры {date}:

{title}

...

и

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

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

1 голос
/ 01 мая 2013

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

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

def convertDate (def epoch)

{

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));

// чтобы получить дату эпохи:

// long epoch = new java.text.SimpleDateFormat ("MM / dd / гггг ЧЧ: мм: сс"). Parse ("01.01.1970 01:00:00"). GetTime () * 1000 ;

return dt;

} // конец определения

Итак, дата закладки Firefox, экспортированная как JSON, дала мне:

json.lastModified: 1366313580447014

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

от:

println "конвертировать с даты эпохи:" + convertDate (json.lastModified)

1 голос
/ 12 февраля 2009

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

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

1227217588 = Четверг, 20 ноября 2008 г., 21:46:28 GMT

Дополнительные 6 цифр могут быть связаны с форматированием или какими-то расширенными атрибутами.

Существует некоторый пример кода для преобразования Unix Timestamps , если это действительно так.

0 голосов
/ 22 марта 2019

Начиная с последней версии Chrome 73.0.3683.86 (официальная сборка) (64-разрядная версия):

  • Когда я экспортирую закладку, я получаю html-файл вроде «bookmarks_3_22_19.html».
  • И у каждого элемента есть поле «add_date», которое содержит строку даты. как это:
<a href="https://stackoverflow.com" add_date="1553220774" icon="">Stack Overflow</a>
  • Эта временная метка фактически равна секундам (не микросекундам) с 1 января 1970 года. Поэтому мы можем проанализировать ее с помощью Javascript, как показано в следующем коде:
function ChromeTimeToDate(timestamp) {
   var seconds = parseInt(timestamp, 10);
   var dt = new Date();
   dt.setTime(seconds * 1000);
   return dt;
}
  • Для ссылки верхнего примера мы можем вызвать ChromeTimeToDate('1553220774'), чтобы получить Date.
ChromeTimeToDate('1553220774')
12:09:03.263 Fri Mar 22 2019 10:12:54 GMT+0800 (Australian Western Standard Time)
...