Это эквивалентно метке времени Unix [то есть прямому счету с 1970 года], но в миллисекундах вместо секунд.
$ date -d @1311346453
Fri Jul 22 10:54:13 EDT 2011
Окончание с 3064
сделало это очевидным для меня.
Таким образом, для конвертации в .NET вы должны использовать
static readonly DateTime epoch = new DateTime(1970,1,1,0,0,0,
DateTimeKind.Utc);
long value = 1311346453064L;
var ts = new TimeSpan(value*TimeSpan.TicksPerMillisecond);
var dt = epoch + ts;
Или, немного более эффективно, за счет некоторой читабельности
const long epochTicks = 621355968000000000L;
var dt = new TimeSpan(value*TimeSpan.TicksPerMillisecond+epochTicks,
DateTimeKind.Utc);
Обратите внимание, что при этом отбрасывается информация о часовом поясе (смещение-04:00
) в другом поле.