[英]Set the year in a DateTime object
我將如何只更改日期時間對象中的年份?
我需要從 excel 中調用多個日期,如果我調用的日期在今天之前,請將年份設置為 2099。
例如調用的日期:15/11/2010 需要設置為 15/11/2099
這是可行的嗎? 還是最好更改整個日期?
你只需要創建一個新的DateTime
因為DateTime
是一個不可變的結構:
DateTime newDt = new DateTime(2099, dt.Month, dt.Day);
如果您想處理閏年問題(源日期在閏年但目標年份不是),您可以使用以下擴展方法:
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 日日期可能會失效。
根據上面的答案,這是我不要對 2 月 29 日生氣的擴展方法:
public static DateTime ChangeYear(this DateTime dt, int newYear)
{
if (!DateTime.IsLeapYear(newYear) && dt.Month == 2 && dt.Day > 28)
{
dt = dt.ChangeDay(28);
}
return dt.AddYears(newYear - dt.Year);
}
我知道我知道,它不會“只改變 OP 想要的年份”,但這是我迄今為止最好的方法^^
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.