C# странно с DateTime
Я получил какой-то странный результат для:
Console.WriteLine(new DateTime(1296346155).ToString());
Результат:
01.01.0001 0:02:09
, но это не правильно!
Я проанализировал значение 1296346155 из какого-то файла. Он сказал, что это в UTC;
Пожалуйста, объясните;)
Спасибо за помощь!)))
6 ответов:
DateTime ожидает " дату и время, выраженные в количестве 100-наносекундных интервалов, прошедших с 1 января 0001 года в 00:00:00.000 по Григорианскому календарю."(от msdn)
Этот вопрос показывает, как можно преобразовать метку времени unix в дату-время.
Конструктор для DateTime, который принимает тип
Таким образом, 1296346155 тиков - это 129 секунд.long
, ожидает значенияticks
, а не секунды или даже миллисекунды, и не из1/1/1970
, как в других языках.
Если это время Unix, то следующее должно дать ожидаемый результат;
DateTime baseTime = new DateTime(1970, 1, 1, 0, 0, 0); Console.WriteLine(baseTime.AddSeconds(1296346155));
СмотритеUnix Time для получения дополнительной информации.
Этот конструктор не то, что вы хотите, так как время не измеряется в ТИКах.
DateTime start = new DateTime(1970,1,1,0,0,0,0); start = start.AddSeconds(1296346155).ToLocalTime(); Console.WriteLine(start); // You don't need to use ToString() in a Console.WriteLine call
Я нашел следующую тему, где есть преобразование между unix timestamp (тот, который у вас есть) и .Net DateTime
Это верно - чего вы ожидали и почему?
Конструктор Система.DateTime (Int64) принимает число 100-наносекундных интервалов (известных как тики) с 1 января 0001 года (по Григорианскому календарю).
Таким образом, 1296346155 / 10000000 дает вам число секунд, которое равно 129,6.Таким образом, это должно отображать 2 минуты и 9 секунд с полуночи 1 января 0001.