Вопрос по .net, c# – Почему DateTime.AddHours не работает?

17

У меня такой же результат 1338161400, когда я делаю

    DateTime origin = new DateTime(1970, 1, 1, 0, 0, 0, 0);
    DateTime date = DateTime.Parse(@"28/05/12 01:30");
    TimeSpan diff = date.ToUniversalTime() - origin;
    Console.WriteLine( (Math.Floor(diff.TotalSeconds)).ToString());

а также когда я использую date.AddHours (-4):

    DateTime origin = new DateTime(1970, 1, 1, 0, 0, 0, 0);
    DateTime date = DateTime.Parse(@"28/05/12 01:30");
    date.AddHours(-4);
    TimeSpan diff = date.ToUniversalTime() - origin;
    Console.WriteLine( (Math.Floor(diff.TotalSeconds)).ToString());

Я пытаюсь получить 1338168600 какhttp://www.mbari.org/staff/rich/utccalc.htm

Обновить:

Спасибо, я изменился на

    DateTime origin = new DateTime(1970, 1, 1, 0, 0, 0, 0);
    DateTime date = DateTime.Parse(@"28/05/2012 01:30");
    date = date.AddHours(-4);
    date = date.ToUniversalTime();
    TimeSpan diff = date - origin;
    Console.WriteLine((Math.Floor(diff.TotalSeconds)).ToString());  

Но я получил 1338147000, а не 1338168600

Ваш Ответ

7   ответов
8

AddHours возвращаетnew DateTime объект, который является результатом добавления часов на оригинал. Оригинал оставлен без изменений.

Таким образом, вы хотитеdate = date.AddHours(-4); вместо простоdate.AddHours(-4);

1

Попробуйте, если это работает:

System.DateTime today = System.DateTime.Now;
System.TimeSpan duration = new System.TimeSpan(0, 11, 0, 0);
System.DateTime answer = today.Add(duration);
System.Console.WriteLine("{0:dddd}", answer);

Это, кажется, меняет день в дате, также добавляя часы.

4

AddHours просто возвращает новую увеличенную дату, используйте это:

date = date.AddHours(-4);
5

Исходная дата установлена на 4 часа назад, но вы не установили ее на новую дату. попробуйте это вместо:

date = date.AddHours(-4);
59

Даты являются неизменяемыми объектами, то есть они не могут быть изменены после создания. DateTime.AddHours возвращает новый экземпляр DateTime, который сдвинут назад на 4 часа, но «дата» не будет изменено

Использование:

DateTime newDate = date.AddHours(-4);
@Slugart Date всегда доставляет мне головную боль, от которой я отказываюсь, пытаясь понять и просто заставить вещи работать :) user310291
В конце концов, мне просто нужно добавить +2 вместо :) user310291
@ user310291 Я не вижу никаких проблем с кодом, но я не могу ручаться за правильность вашей логики.
+1 за неизменный вызов.
Правильный ответ Мне нужно подождать 6 минут, прежде чем проверять его как хороший ответ из-за правила stackoverflow. Но я обновил свой пост, также вы можете прочитать его спасибо? user310291
2

AddHours возвращает новый объект DateTime. сделай это:

date = date.AddHours(-4);

Документация:ссылка на сайт

4

DateTime не является неизменным. Просто методы DateTime не изменяют структуру, а вместо этого возвращают новую.

Если вы делаете это:

DateTime d1 = DateTime.Now;
DateTime d2 = DateTime.Now;
d1 = d2;

Затем структура d1 будет перезаписана значениями d2.

Я не знаю, возможно ли иметь неизменяемую структуру.

Похожие вопросы