首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在DateTime对象中设置年份

在DateTime对象中设置年份
EN

Stack Overflow用户
提问于 2017-01-23 19:42:12
回答 2查看 24.5K关注 0票数 7

如何在datetime对象中只更改年份?

我需要从excel中调用多个日期,如果调用的日期早于todays日期,则将年份设置为2099。

例如,日期为: 15/11/2010需要设置为15/11/2099

这可行吗?或者更改整个日期是最好的吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-01-23 19:43:14

你只需要创建一个新的DateTime,因为DateTime是一个不可变的结构:

代码语言:javascript
复制
DateTime newDt = new DateTime(2099, dt.Month, dt.Day);

如果您想处理leapyear问题(源日期在leapyear中,但目标年份不在leapyear中),您可以使用以下扩展方法:

代码语言:javascript
复制
public static DateTime ChangeYear(this DateTime dt, int newYear)
{
    return dt.AddYears(newYear - dt.Year);
}

这样甚至可以保留TicksKind,所以它比使用DateTime构造函数要好。如果原始的DateTime是02/29/2016(闰年),它将返回02/28/2099

例如,您可以这样使用它:

代码语言:javascript
复制
DateTime dt = new DateTime(2016, 2, 29);
DateTime newDt = dt.ChangeYear(2099); 
票数 25
EN

Stack Overflow用户

发布于 2017-01-23 19:43:00

DateTime是不可变类型。您不能更改年份或其中的任何其他部分。您应该使用新年创建新的DateTime实例。没有其他选择。

代码语言:javascript
复制
var date1 = DateTime.Now;
var date2 = new DateTime(2099, date1.Month, date1.Day);

不过,如果您需要经常这样做,您可以编写一个扩展:

代码语言:javascript
复制
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);
}

用法:

代码语言:javascript
复制
var date2 = date1.JumpToYear(2099);

注意:更改年份后,2月29日的日期可能会无效。

票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41805583

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档