我如何才能改变我的DateTime变量“s”的时间?
DateTime s = some datetime;
我如何才能改变我的DateTime变量“s”的时间?
DateTime s = some datetime;
当前回答
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
其他回答
一个衬套
var date = DateTime.Now.Date.Add(new TimeSpan(4, 30, 0));
将带回今天的日期,时间为4:30:00,取代DateTime。现在对于任何date对象
事实上,时间一旦创建就不能更改。 但是你可以用很多构造函数轻松创建它: 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对象时,使用一个允许你指定时间的构造函数:
var myDateTime = new DateTime(2000, 01, 01, 13, 37, 42); // 2000-01-01 13:37:42
如果您已经有一个DateTime对象,并希望更改时间,您可以使用简单的方法添加分钟,小时或秒到您的DateTime:
var myDateTime = new DateTime(2000, 01, 01); // 2000-01-01 00:00:00
myDateTime = myDateTime.AddHours(13); // 2000-01-01 13:00:00
myDateTime = myDateTime.AddMinutes(37); // 2000-01-01 13:37:00
myDateTime = myDateTime.AddSecounds(42); // 2000-01-01 13:37:42
注意,我们必须“保存”每个方法调用myDateTime变量的结果。这是因为DateTime是不可变的,它的方法只是创建添加了额外小时/分钟/秒的新实例。
如果你需要同时添加小时和分钟(和/或秒)以及相同的时间,你可以通过在原始的DateTime中添加一个TimeSpan来简化代码:
var myDateTime = new DateTime(2000, 01, 01); // 2000-01-01 00:00:00
myDateTime += new TimeSpan(13, 37, 42); // 2000-01-01 13:37:42
如果你想设置绝对小时/分钟/秒,而不是添加到现有的值,你可以使用前面提到的DateTime构造函数,并重用之前的年/月/日的值:
myDateTime = new DateTime(myDateTime.Year, myDateTime.Month, myDateTime.Day,
20, 33, 19) // 2000-01-01 20:33:19
由于DateTime是不可变的,所以当需要更改日期组件时,必须创建一个新实例。不幸的是,没有内置功能来设置DateTime实例的各个组件。
使用以下扩展方法
public static DateTime SetPart(this DateTime dateTime, int? year, int? month, int? day, int? hour, int? minute, int? second)
{
return new DateTime(
year ?? dateTime.Year,
month ?? dateTime.Month,
day ?? dateTime.Day,
hour ?? dateTime.Hour,
minute ?? dateTime.Minute,
second ?? dateTime.Second
);
}
public static DateTime SetYear(this DateTime dateTime, int year)
{
return dateTime.SetPart(year, null, null, null, null, null);
}
public static DateTime SetMonth(this DateTime dateTime, int month)
{
return dateTime.SetPart(null, month, null, null, null, null);
}
public static DateTime SetDay(this DateTime dateTime, int day)
{
return dateTime.SetPart(null, null, day, null, null, null);
}
public static DateTime SetHour(this DateTime dateTime, int hour)
{
return dateTime.SetPart(null, null, null, hour, null, null);
}
public static DateTime SetMinute(this DateTime dateTime, int minute)
{
return dateTime.SetPart(null, null, null, null, minute, null);
}
public static DateTime SetSecond(this DateTime dateTime, int second)
{
return dateTime.SetPart(null, null, null, null, null, second);
}
您可以设置单独的DateTime组件,如
var now = DateTime.Now;
now.SetSecond(0);
你不能改变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数据库条目而变得“可感知”。