Вам просто нужно создать новый DateTime
поскольку DateTime
непреложная структура:
DateTime newDt = new DateTime(2099, dt.Month, dt.Day);
Если вы хотите, чтобы справиться с leapyear вопроса (дата источника в leapyear но целевой год нет), вы можете использовать следующее метод расширения:
public static DateTime ChangeYear(this DateTime dt, int newYear)
{
return dt.AddYears(newYear - dt.Year);
}
Это сохранит даже Ticks
и Kind
, так что лучше, чем с помощью DateTime
конструктора. Он вернет 02/28/2099
, если оригинал DateTime был 02/29/2016
(високосный год).
Вы можете использовать его, например, таким образом:
DateTime dt = new DateTime(2016, 2, 29);
DateTime newDt = dt.ChangeYear(2099);
Там проблема с '29 Feb' (например,' дт == 29 февраля 2016') –
@DmitryBychenko: верно, но ОП получит значащее исключение. Что бы вы сделали иначе, чтобы «исправить» его? –
@DmitryBychenko Я уже указал эту проблему, но вы не можете сказать, что '29 февраля 2016' следует перевести на« 1 марта 2099 года ». Что делать с «1 марта 2016 года»? Это всего лишь случай с ошибкой –