Конвертировать эпоху /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