如何仅在c# DateTime对象中更改日期?

本文关键字:日期 对象 何仅 DateTime | 更新日期: 2023-09-27 18:11:56

我正在寻找一个优雅的解决方案(如果存在的话)来实现我在标题中描述的内容。

我看到了一个"在DateTime对象中更改时间"的优雅解决方案,如下所示:

DateTime s = ...;
TimeSpan ts = new TimeSpan(10, 30, 0);
s = s.Date + ts;

如果有这样的解决方案来改变日期在DateTime对象?

如何仅在c# DateTime对象中更改日期?

DateTime结构体被设计为不可变的,所以你不能改变它。您可以根据旧的值获得一个新的,这正是您的解决方案所做的。

您可以使用DateTime构造函数使其更清楚,它接受所有日期和时间值:年,月,日,小时,分钟和秒。

s = new DateTime(s.Year, s.Month, s.Day, 10, 30, 0);
s = new DateTime(2014, 10, 2, s.Hour, s.Minute, s.Second);

或者可以使用TimeOfDay property:

s = new DateTime(2014, 10, 2) + s.TimeOfDay;

假设您要传递一个新的DateTime对象来更新您现有的对象,这样的函数可以工作。

DateTime UpdateDate(DateTime existingDate, DateTime newDate)
{
    return  newDate.Date + existingDate.TimeOfDay;
}
myDatetime = new DateTime(year, month, day);

您可以使用DateTime构造函数,这样您就可以保留原始时间。

请看下面的例子:

var firstDate = new DateTime(2015, 01, 01, 15, 0, 0);
var newDate = DateTime.Now;
// New date, original time.            
firstDate = new DateTime(newDate.Year, newDate.Month, newDate.Day, firstDate.Hour, firstDate.Minute, firstDate.Second, firstDate.Millisecond);

试试这个:

DateTime s = ...;
s = new DateTime(year, month, day) + s.TimeOfDay;

保留原始DateTime中的时间

试试这个:

 DateTime now = DateTime.Now;
 DateTime dateOnly = now.Date;
 TimeSpan time = now.TimeOfDay;
 dateOnly = DateTime.Parse("5/15/15"); // or whatever date you choose
 DateTime newDateTime = dateOnly + time;