我如何才能改变我的DateTime变量“s”的时间?

DateTime s = some datetime;

当前回答

//The fastest way to copy time            

DateTime justDate = new DateTime(2011, 1, 1); // 1/1/2011 12:00:00AM the date you will be adding time to, time ticks = 0
DateTime timeSource = new DateTime(1999, 2, 4, 10, 15, 30); // 2/4/1999 10:15:30AM - time tick = x

justDate = new DateTime(justDate.Date.Ticks + timeSource.TimeOfDay.Ticks);

Console.WriteLine(justDate); // 1/1/2011 10:15:30AM
Console.Read();

其他回答

s = s.Date.AddHours(x).AddMinutes(y).AddSeconds(z);

这样你就可以保留你的日期,同时根据你的喜好插入新的时、分、秒部分。

你不能改变DateTime值——它是不可变的。但是,您可以将变量更改为新的值。要更改时间,最简单的方法是创建具有相关时间的TimeSpan,并使用DateTime。日期属性:

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

S现在是相同的日期,但在上午10点半。

注意,DateTime不考虑日光节约时间的转换,在两个方向上表示“朴素”格里高利时间(参见DateTime文档中的备注部分)。唯一的例外是. now和. today:它们检索反映这些事件发生时的当前系统时间。

这就是促使我开始Noda Time项目的原因,现在这个项目已经可以投入生产了。它的zoneeddatetime类型通过将其链接到tz数据库条目而变得“可感知”。

碰巧看到这篇文章,因为我正在寻找相同的功能,这可能会做什么人想要的。取原日期,更换时间部分

DateTime dayOpen = DateTime.Parse(processDay.ToShortDateString() + " 05:00 AM");
DateTime ts = DateTime.Now;
ts = new DateTime ( ts.Year, ts.Month, ts.Day, 0, 0, 0 ) ;
Console.WriteLine ( "Today = " + ts.ToString("M/dd/yy HH:mm:ss") ) ;

执行: 今天= 9/04/15 00:00:00

int year = 2012;
int month = 12;
int day = 24;
int hour = 0;
int min = 0;
int second = 23;
DateTime dt = new DateTime(year, month, day, hour, min, second);