我如何才能更改日期时间对象中的年份?
我需要从excel调用一些日期,如果我调用的日期是在今天之前,请将年份设置为2099.
e.g。被称为日期:15/11/2010需要设置为15/11/2099
这可行吗?或者最好改变整个日期?
答案 0 :(得分:10)
您只需要创建一个新的DateTime
,因为DateTime
是一个不可变的结构:
DateTime newDt = new DateTime(2099, dt.Month, dt.Day);
如果你想处理这个问题(源日期是在leapyear但目标年份没有),你可以使用以下扩展方法:
public static DateTime ChangeYear(this DateTime dt, int newYear)
{
return dt.AddYears(newYear - dt.Year);
}
这将保留Ticks
和Kind
,因此它比使用DateTime
构造函数更好。如果原始DateTime为02/28/2099
(闰年),它将返回02/29/2016
。
您可以这样使用它:
DateTime dt = new DateTime(2016, 2, 29);
DateTime newDt = dt.ChangeYear(2099);
答案 1 :(得分:8)
DateTime
是不可变类型。您不能更改年份或其他任何部分。您应该使用新年创建新的DateTime
实例。没有其他选择。
var date1 = DateTime.Now;
var date2 = new DateTime(2099, date1.Month, date1.Day);
如果你需要经常这样做,你可以写一个扩展名:
public static DateTime JumpToYear(this DateTime date, int year)
{
// you can also provide Hour, Minute, Second and Millisecond
return new DateTime(year, date.Month, date.Day);
}
用法:
var date2 = date1.JumpToYear(2099);
注意:更改年份后,2月29日的日期可能会失效。