C # странно с DateTime - PullRequest
       5

C # странно с DateTime

2 голосов
/ 12 апреля 2011

У меня странный результат для:

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

Результат:

01.01.0001 0: 02: 09

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

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

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

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

Ответы [ 6 ]

5 голосов
/ 12 апреля 2011

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

Этот вопрос показывает, как можно преобразовать метку времени Unix в DateTime.

4 голосов
/ 12 апреля 2011

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

То есть 1296346155 тиков - это 129 секунд .

3 голосов
/ 12 апреля 2011

Этот конструктор не тот, который вам нужен, поскольку время не измеряется в тиках.

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
3 голосов
/ 12 апреля 2011

Если время Unix, то следующее должно дать ожидаемый результат;

DateTime baseTime = new DateTime(1970, 1, 1, 0, 0, 0);
Console.WriteLine(baseTime.AddSeconds(1296346155));

См. Unix Time для получения дополнительной информации.

2 голосов
/ 12 апреля 2011

Я нашел следующую тему, где есть преобразование между отметкой времени unix (той, которая у вас есть) и .Net DateTime

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

2 голосов
/ 12 апреля 2011

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

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

Следовательно, 1296346155/10000000 дает вам количество секунд, которое составляет 129,6.

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

...