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

DateTime s = some datetime;

当前回答

这是一种贫民区的方法,但它很有效:)

DateTime dt = DateTime.Now; //get a DateTime variable for the example
string newSecondsValue = "00";
dt = Convert.ToDateTime(dt.ToString("MM/dd/yyyy hh:mm:" + newSecondsValue));

其他回答

使用日期。添加并添加带有您想添加的新时间的New TimeSpan

DateTime dt = DateTime.Now
dt.Date.Add(new TimeSpan(12,15,00))

DateTime是不可变类型,因此不能更改它。

但是,您可以基于之前的实例创建一个新的DateTime实例。在您的示例中,似乎需要Date属性,然后可以添加一个表示一天中的时间的TimeSpan。

就像这样:

var newDt = s.Date + TimeSpan.FromHours(2);

事实上,时间一旦创建就不能更改。 但是你可以用很多构造函数轻松创建它: https://learn.microsoft.com/en-us/dotnet/api/system.datetime.-ctor?view=netframework-4.7.2

例如,如果你想创建一个DateTime变化的秒,你可以这样做:

DateTime now = DateTime.Now;
DateTime secondschanged = new DateTime(now.Year, now.Month, now.Day, now.Hour, now.Minute, yourseconds);

你不能改变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 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