San*_*osh 330 c# time datetime
如何只更改DateTime变量"s"中的时间?
DateTime s = some datetime;
Run Code Online (Sandbox Code Playgroud)
Jon*_*eet 561
您无法更改DateTime值 - 它是不可变的.但是,您可以将变量更改为具有新值.这样做最简单的方法就是创建一个具有相关时间的TimeSpan,并使用DateTime.Date属性:
DateTime s = ...;
TimeSpan ts = new TimeSpan(10, 30, 0);
s = s.Date + ts;
Run Code Online (Sandbox Code Playgroud)
s 现在将是同一天,但是在上午10点30分.
请注意,DateTime忽略夏令时转换,表示两个方向上的"天真"格里高利时间(请参阅DateTime文档中的备注部分).唯一的例外是.Now和.Today:它们检索所出现的哪些反映了这些事件的当前系统时间.
这是促使我启动Noda Time项目的一种方式,该项目现已投入生产.通过将其链接到数据库条目,可以ZonedDateTime "识别" 它的类型.tz
jos*_*ley 94
好吧,我正在考虑我的建议,一种扩展方法:
public static DateTime ChangeTime(this DateTime dateTime, int hours, int minutes, int seconds, int milliseconds)
{
return new DateTime(
dateTime.Year,
dateTime.Month,
dateTime.Day,
hours,
minutes,
seconds,
milliseconds,
dateTime.Kind);
}
Run Code Online (Sandbox Code Playgroud)
然后打电话:
DateTime myDate = DateTime.Now.ChangeTime(10,10,10,0);
Run Code Online (Sandbox Code Playgroud)
请务必注意,此扩展会返回一个新的日期对象,因此您无法执行此操作:
DateTime myDate = DateTime.Now;
myDate.ChangeTime(10,10,10,0);
Run Code Online (Sandbox Code Playgroud)
但你可以这样做:
DateTime myDate = DateTime.Now;
myDate = myDate.ChangeTime(10,10,10,0);
Run Code Online (Sandbox Code Playgroud)
Web*_*euw 69
s = s.Date.AddHours(x).AddMinutes(y).AddSeconds(z);
Run Code Online (Sandbox Code Playgroud)
通过这种方式,您可以保留日期,同时根据自己的喜好插入新的小时,分钟和秒.
小智 33
一个班轮
var date = DateTime.Now.Date.Add(new TimeSpan(4, 30, 0));
Run Code Online (Sandbox Code Playgroud)
将以4:30:00的时间带回今天的日期,将DateTime.Now替换为任何日期对象
Mar*_*ann 22
DateTime是一个不可变类型,因此您无法更改它.
但是,您可以基于先前的实例创建新的DateTime实例.在您的情况下,听起来您需要Date属性,然后您可以添加表示一天中的时间的TimeSpan.
像这样的东西:
var newDt = s.Date + TimeSpan.FromHours(2);
Run Code Online (Sandbox Code Playgroud)
小智 17
如果您已将时间存储在另一个DateTime对象中,则可以使用该Add方法.
DateTime dateToUse = DateTime.Now();
DateTime timeToUse = new DateTime(2012, 2, 4, 10, 15, 30); //10:15:30 AM
DateTime dateWithRightTime = dateToUse.Date.Add(timeToUse.TimeOfDay);
Run Code Online (Sandbox Code Playgroud)
该TimeOfDay属性是一个TimeSpan对象,可以传递给该Add方法.由于我们使用变量的Date属性,dateToUse我们只得到日期并添加时间跨度.
Mr *_*bix 14
最简单的解决方案
DateTime s = //some Datetime that you want to change time for 8:36:44 ;
s = new DateTime(s.Year, s.Month, s.Day, 8, 36, 44);
Run Code Online (Sandbox Code Playgroud)
如果您需要特定的日期和时间格式:
s = new DateTime(s.Year, s.Month, s.Day, 8, 36, 44).ToString("yyyy-MM-dd h:mm:ss");
Run Code Online (Sandbox Code Playgroud)
小智 9
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") ) ;
Run Code Online (Sandbox Code Playgroud)
执行时间:今天= 9/04/15 00:00:00
将 .Date 添加到日期会将其设置为午夜 (00:00)。
MyDate.Date
Run Code Online (Sandbox Code Playgroud)
注意等效的 SQL 是CONVERT(DATETIME, CONVERT(DATE, @MyDate))
这种方法之所以如此出色,是因为它既可以快速输入,又易于阅读。好处是没有字符串转换。
即要将今天的日期设置为 23:30,请使用:
DateTime.Now.Date.AddHours(23).AddMinutes(30)
Run Code Online (Sandbox Code Playgroud)
您当然可以将 DateTime.Now 或 MyDate 替换为您选择的任何日期。
您可以通过DateTime多种不同方式将初始值分配给新值:
扩展方式 DateTime
public static DateTime ChangeTime(this DateTime dateTime, int hours, int minutes, int seconds = default, int milliseconds = default)
{
return new DateTime(dateTime.Year, dateTime.Month, dateTime.Day, hours, minutes, seconds, milliseconds, dateTime.Kind);
}
Run Code Online (Sandbox Code Playgroud)
然后使用ChangeTime:
DateTime datetime = DateTime.Now; //Your DateTime
datetime = datetime.ChangeTime(12, 20, 10);
Run Code Online (Sandbox Code Playgroud)
使用添加方法
DateTime datetime = DateTime.Now; //Your DateTime
datetime = datetime.Date.AddHours(12).AddMinutes(20).AddSeconds(10);
Run Code Online (Sandbox Code Playgroud)使用时间跨度
DateTime datetime = DateTime.Now; //Your DateTime
datetime = datetime.Date.Add(new TimeSpan(12, 20, 10));
Run Code Online (Sandbox Code Playgroud)使用初始值
DateTime datetime = DateTime.Now;
datetime = new DateTime(datetime.Year, datetime.Month, datetime.Day, 12, 20, 10);
Run Code Online (Sandbox Code Playgroud)小智 8
发生在这篇文章上,因为我正在寻找相同的功能,这可能会做到这个人想要的.取原始日期并更换时间部分
DateTime dayOpen = DateTime.Parse(processDay.ToShortDateString() + " 05:00 AM");
Run Code Online (Sandbox Code Playgroud)
小智 5
由于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);
}
Run Code Online (Sandbox Code Playgroud)
您可以设置单独的DateTime组件,例如
var now = DateTime.Now;
now.SetSecond(0);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
358152 次 |
| 最近记录: |