C# странно с DateTime


Я получил какой-то странный результат для:

Console.WriteLine(new DateTime(1296346155).ToString());

Результат:

01.01.0001 0:02:09

, но это не правильно!

Я проанализировал значение 1296346155 из какого-то файла. Он сказал, что это в UTC;

Пожалуйста, объясните;)

Спасибо за помощь!)))

6 2

6 ответов:

DateTime ожидает " дату и время, выраженные в количестве 100-наносекундных интервалов, прошедших с 1 января 0001 года в 00:00:00.000 по Григорианскому календарю."(от msdn)

Этот вопрос показывает, как можно преобразовать метку времени unix в дату-время.

Конструктор для DateTime, который принимает тип long, ожидает значения ticks, а не секунды или даже миллисекунды, и не из 1/1/1970, как в других языках.

Таким образом, 1296346155 тиков - это 129 секунд.

Если это время 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

Как преобразовать метку времени Unix в DateTime и наоборот?

Это верно - чего вы ожидали и почему?

Конструктор Система.DateTime (Int64) принимает число 100-наносекундных интервалов (известных как тики) с 1 января 0001 года (по Григорианскому календарю).

Таким образом, 1296346155 / 10000000 дает вам число секунд, которое равно 129,6.

Таким образом, это должно отображать 2 минуты и 9 секунд с полуночи 1 января 0001.