C # Дата манипуляции - PullRequest
1 голос
/ 07 февраля 2012

я делаю это неправильно?

                DateTime previousDay = new DateTime(year, month, day);
                string test1 = previousDay.ToString();
                previousDay.Subtract(new TimeSpan(1, 0, 0, 0));
                string test2 = previousDay.ToString();
                previousDay.AddDays(-1);
                string test3 = previousDay.ToString();

По некоторым причинам, вероятно, очевидным для большинства людей, дата не меняется с test1 на test3.
Помогите пожалуйста!

Ответы [ 8 ]

13 голосов
/ 07 февраля 2012

DateTime является неизменным - когда вы звоните Subtract, он не меняет цель вызова, он возвращает новое значение:

DateTime previousDay = new DateTime(year, month, day);
string test1 = previousDay.ToString();
previousDay = previousDay.Subtract(new TimeSpan(1, 0, 0, 0));
string test2 = previousDay.ToString();
previousDay = previousDay.Subtract(new TimeSpan(1, 0, 0, 0));
string test3 = previousDay.ToString();

Хотя я 'd используйте оператор - и TimeSpan.FromDays:

DateTime previousDay = new DateTime(year, month, day);
string test1 = previousDay.ToString();
previousDay = previousDay - TimeSpan.FromDays(1);
string test2 = previousDay.ToString();
previousDay = previousDay - TimeSpan.FromDays(1);
string test3 = previousDay.ToString();

Или еще лучше используйте AddDays:

DateTime previousDay = new DateTime(year, month, day);
string test1 = previousDay.ToString();
previousDay = previousDay.AddDays(-1);
string test2 = previousDay.ToString();
previousDay = previousDay.AddDays(-1);
string test3 = previousDay.ToString();

Или еще лучше используйте NodaВремя :)

LocalDate date = new LocalDate(year, month, day);
string test1 = previousDay.ToString();
date = date.PlusDays(-1);
string test2 = previousDay.ToString();
date = date.PlusDays(-1);
string test3 = previousDay.ToString();

Или:

LocalDate date = new LocalDate(year, month, day);
string test1 = previousDay.ToString();
date = date + Period.FromDays(-1);
string test2 = previousDay.ToString();
date = date + Period.FromDays(-1);
string test3 = previousDay.ToString();
2 голосов
/ 07 февраля 2012

Проблема в том, что вы фактически не меняете значение предыдущего дня.

Вам необходимо назначить новое значение:

previousDay = previousDay.AddDays(-1);
2 голосов
/ 07 февраля 2012

:) Возвращает новое время и дату, но не изменяет значение объекта вызывающего абонента

previousDay.AddDays(-1);
1 голос
/ 07 февраля 2012

Вы просто вычитаете новый временной интервал из переменной datetime, но не присваиваете результат переменной datetime.Таким образом, изменения не повлияют на переменную datetime.Так что лучше так и сделай.

previousDay = previousDay.Subtract(new TimeSpan(1, 0, 0, 0));
string test2 = previousDay.ToString();

or

string test2 = (previousDay.Subtract(new TimeSpan(1, 0, 0, 0))).ToString();
1 голос
/ 07 февраля 2012

Изменить эту строку:

previousDay.Subtract(new TimeSpan(1, 0, 0, 0)); 

в

previousDay = previousDay.Subtract(new TimeSpan(1, 0, 0, 0)); 

OR

, если вы не хотите изменять предыдущую переменную

DateTime updatedPreviousDay = previousDay.Subtract(new TimeSpan(1, 0, 0, 0)); 
1 голос
/ 07 февраля 2012

Вычтите временной интервал возврата с новым значением. Вы продолжаете использовать старое значение.

больше информации: http://msdn.microsoft.com/en-us/library/8ysw4sby.aspx

1 голос
/ 07 февраля 2012

Попробуйте: (поскольку DateTime, как и класс строки, является неизменным)

DateTime previousDay = new DateTime(year, month, day);                 
string test1 = previousDay.ToString();                 
previousDay = previousDay.Subtract(new TimeSpan(1, 0, 0, 0));                 

и т. Д.

1 голос
/ 07 февраля 2012

DateTime является неизменным, то есть каждый вызов Subtract и AddDays фактически возвращает новый экземпляр со значениями. previousDay никогда не изменится.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...