Построение DateTime по одному шагу за раз - PullRequest
1 голос
/ 20 августа 2009

Я пытаюсь создать DateTime в C # по одному шагу за раз, как, например, вся дата не в конструкторе. Я не понимаю, что не так, хотя.

DateTime d = new DateTime((long)0);
d.AddYears(2000);

с этим d.Years все равно будет равно 1. Кроме того, я должен хранить дату как длинную. Поэтому я не могу просто построить дату с помощью огромного конструктора, и у меня также не может быть постоянного экземпляра DateTime, поэтому я сбрасываю его в long, а затем восстанавливаю и начинаю со значения 0. Должен ли я начать с значения, отличного от нуля?

что именно не так?

Ответы [ 4 ]

16 голосов
/ 20 августа 2009

Структура DateTime является неизменной, что означает, что ее свойства не могут изменяться.

Метод AddYears возвращает новый DateTime, который вы должны использовать:

DateTime d = new DateTime((long)0);
d = d.AddYears(2000);
2 голосов
/ 20 августа 2009

Возможно, не по теме, но если вам нужно сохранить DateTime как long, то почему бы не сохранить значение, возвращаемое свойством Ticks.

Вы можете затем восстановить свой экземпляр DateTime, используя конструктор, который принимает параметр ticks :

// stage 1
DateTime dt = DateTime.MinValue.AddYears(2009);
PersistTicksToSomewhere(dt.Ticks);

// stage 2
long ticks = GetPersistedTicksFromSomewhere();
DateTime dt = new DateTime(ticks).AddMonths(8);
PersistTicksToSomewhere(dt.Ticks);

// stage 3
long ticks = GetPersistedTicksFromSomewhere();
DateTime dt = new DateTime(ticks).AddDays(20);
PersistTicksToSomewhere(dt.Ticks);

// etc etc
1 голос
/ 20 августа 2009

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

Это:

DateTime d = new DateTime(2000,0,0);

лучше чем:

DateTime d = new DateTime((long)0);
d = d.AddYears(2000);

Просто создайте как можно больше даты и вставьте нули для других параметров.

0 голосов
/ 21 августа 2009

DateTime является неизменным, поэтому вы должны изменить его следующим образом DateTime d = new DateTime(); d d.AddYears(2000);

Однако это будет создавать новый DateTime в 99,9% случаев, но это нормально, но если он вложен в цикл, который выполняется вечно, вам лучше использовать один из многих конструкторов DateTime. Используйте то же правило, что и для string и StringBuilder.

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