Конвертировать эпоху /unix в Datetime

Это вопрос не дубликат, этот quesitons демонстрирует проблему с методом преобразования, а не как выполнить преобразование. Прочитайте вопрос полностью.

У меня есть метка времени, которая, как я считаю, является отметкой времени unix, при использовании следующего конвертера он правильно конвертирует штамп

Значение: 1365151714493

http://www.epochconverter.com/

Я просмотрел и нашел пример о том, как преобразовать это в datetime obect и метод кажется простым, создать объект datetime и установите дату на ночь ночи 1/1/1970 и добавьте значение как второе:

public static DateTime? ConvertUnixTimeStamp(string unixTimeStamp)
{
    return new DateTime(1970, 1, 1, 0, 0).AddSeconds(Convert.ToDouble(unixTimeStamp));
}

Проблема заключается в том, что каждый раз, когда я вызываю этот mehod со значением выше, я получаю исключение за пределами диапазона.

Нужно ли мне сначала что-то делать со значением? строка преобразуется в double ok. исключение вызывается при вызове AddSeconds(double) methos

Ответ 1

Эта метка времени (1365151714493) находится в миллисекундах, а не секундах. Вам нужно разделить на 1000 или использовать AddMilliseconds. Если он будет считаться секундой, это означает, что в будущем это число составит 43 259 (приблизительный расчет). Это превышает диапазон DateTime, который maxes out в 10000 году, тем самым бросая ArgumentOutOfRangeException.

public static DateTime? ConvertUnixTimeStamp(string unixTimeStamp)
{
    return new DateTime(1970, 1, 1, 0, 0, 0).AddMilliseconds(Convert.ToDouble(unixTimeStamp));
}

Вы также можете подумать о том, чтобы заставить его использовать GMT, как предлагал V4Vendetta. Кроме того, если вы ожидаете иметь сочетание форматов (секунды или миллисекунды), возможно, быстрая оценка размера анализируемого значения может быть разумной.

Ответ 2

Я думаю, вы должны попробовать, так как это относится к GMT

Также из упоминаемого вами сайта предполагается, что значение находится в миллисекундах, а не традиционная временная отметка unix как в секундах

DateTime epoch = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);
epoch = epoch.AddMilliseconds(yourvalue);// your case results to 4/5/2013 8:48:34 AM