Формат даты экспорта Google Bookmark?

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

ADD_DATE = "1231721701079000"

ADD_DATE = "1227217588219000"

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

Ответ 1

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

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

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

Ответ 2

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.

Ответ 3

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

Ответ 4

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

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

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

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

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

<DT> < H3 FOLDED ADD_DATE = "{date}" > {title} </H3 > ...

и

< DT < A href= "{url}" ADD_DATE = "{date}" LAST_VISIT = "{date}" LAST_MODIFIED = "{date}" > {title} </A> ...

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

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

Ответ 5

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

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

1227217588 = Thu, 20.11.2008 21:46:28 GMT

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

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

Ответ 6

Посмотрите здесь на примеры кода: 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/yyyy HH: mm: ss" ). parse ( "01/01/1970 01:00:00" ). getTime() * 1000;

return dt;

}//конец def

Итак, дата закладки firefox экспортируется как json:

json.lastModified: 1366313580447014

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

from:

println "convert from epoch date:" + convertDate (json.lastModified)