如何才能更改datetime對象中的年份?在DateTime對象中設置年份
我需要調用一些從Excel的日期,如果我打電話的日期是當天的日期之前,今年設定爲2099
例如日期被稱爲:15/11/2010需要設置爲15/11/2099
這是可行嗎?或者最好是改變整個日期?
如何才能更改datetime對象中的年份?在DateTime對象中設置年份
我需要調用一些從Excel的日期,如果我打電話的日期是當天的日期之前,今年設定爲2099
例如日期被稱爲:15/11/2010需要設置爲15/11/2099
這是可行嗎?或者最好是改變整個日期?
你只需要創建一個新的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/29/2016
(閏年),它將返回02/28/2099
。
可以以這種方式使用它,例如:
DateTime dt = new DateTime(2016, 2, 29);
DateTime newDt = dt.ChangeYear(2099);
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日起可以變得無效,當你改變一年。
有與'29 Feb'(例如'DT == 2月29日2016') –
@DmitryBychenko一個問題:真的,但OP將獲得有意義的例外。否則你會做什麼來「修復」它? –
@DmitryBychenko我已經指出了這個問題,但是你不能說'2016年2月29日'應該翻譯成'2099年3月1日'。如何處理'2016年3月1日'?這只是一個錯誤的案例 –