Формат даты экспорта 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)