В одной из программ встретился непонятный формат записи времени.
Например, дате 29.01.2014 соответствует такая метка - 130354550430567734
Вряд ли создатели пытались что-то закодировать, скорее, какая-то логика заложена.
Подскажите, кто поймёт, как из этой метки извлекать дату.
Нашёл ответ в документации программы. Если кому-то пригодится подобное вот:
Формат хранения даты принятый в TeamWox - это 64 битный timestamp и соответствует типу INT64 в С++.
Значение даты представляет количество 100-наносекундных интервалов начиная с 1 января 1601 года.
В API Windows это значение соответствует структуре FILETIME и для работы с этой структорой используются такие функции API как FileTimeToSystemTime, GetSystemTimeAsFileTime и другие.
Пример кода преобразования 64 битного таймстампа, который используется в TeamWox в клиентских скриптах JavaScript следующий:
function TimeToInt64(utc)
{
utc = Math.ceil(utc/1000)+11644473600;
return(utc + "0000000");
}
function TimeFromInt64(i64time)
{
if(typeof(i64time)=="string")
{
i64time=parseInt(i64time.substr(0,i64time.length-7));
if(isNaN(i64time))
return(null);
}
else
i64time/=10000000;
//---
return new Date((i64time - 11644473600)*1000);
}
тогда если я не путаю было бы достаточно отбросить последние 3 цифры и получилась бы стандартная метка. Но дата из примера при таким подходе превращается в 6th April 4132741 01:49:27 PM, что явно не верно.
unix time это как раз то, о чем писал @fornit1917, у вас немного измененная модель, которая по всей видимости используется только в конкретной программе. в самой системе она хранится в виде количества секунд с 1.01.1970.