簡體   English   中英

在 DateTime 對象中設置年份

[英]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);
}

這甚至會保留TicksKind ,所以它比使用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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM