Почему DateTime.AddHours не работает?
У меня есть тот же результат 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
Update:
Спасибо, я перешел на
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
Ответы
Ответ 1
Даты являются неизменяемыми объектами, т.е. они не могут быть изменены после создания. DateTime.AddHours возвращает новый экземпляр DateTime, который сдвинут назад на 4 часа, но "дата" не будет изменена.
Использование:
DateTime newDate = date.AddHours(-4);
Ответ 2
AddHours
возвращает новый объект DateTime
, который является результатом добавления часов к оригиналу. Оригинал остается неизменным.
Таким образом, вы хотите date = date.AddHours(-4);
вместо просто date.AddHours(-4);
Ответ 3
Исходная дата установлена на 4 часа назад, но вы не установили ее на новую дату. попробуйте это вместо:
date = date.AddHours(-4);
Ответ 4
AddHours
просто возвращает новую добавленную дату, используйте это:
date = date.AddHours(-4);
Ответ 5
AddHours возвращает новый объект DateTime. сделайте следующее:
date = date.AddHours(-4);
Документация: ссылка
Ответ 6
DateTime не является неизменным. Это просто, что методы DateTime не меняют структуру, но вместо этого возвращают новую.
Если вы это сделаете:
DateTime d1 = DateTime.Now;
DateTime d2 = DateTime.Now;
d1 = d2;
Затем структура d1 будет перезаписана значениями d2.
Я не знаю, возможно ли иметь неизменяемую структуру.