如何改变date时间?

如何在DateTimevariables中单独更改时间?

 DateTime s = some datetime; 

我只需要改变s的时间部分。

您不能更改date时间值 – 它是不可变的。 但是,您可以更改该variables以具有新的值。 最简单的方法就是用相应的时间创buildTimeSpan,并使用DateTime.Date属性:

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

现在是同一天,但在上午十点三十分。

请注意, DateTime忽略夏令时转换,表示两个方向上的“朴素”格里高利时间(请参阅DateTime文档中的备注部分)。 唯一的例外是.Now.Today :它们检索反映这些事件发生的当前系统时间。

这是促使我开始现在可以生产的野田时间项目的那种东西。 它的ZonedDateTimetypes是通过将其链接到tz数据库条目来 “知道” 的 。

好吧我正在用我的build议,一个扩展方法潜水:

 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); } 

然后打电话:

 DateTime myDate = DateTime.Now.ChangeTime(10,10,10,0); 

注意这个扩展返回一个新的date对象是很重要的,所以你不能这样做:

 DateTime myDate = DateTime.Now; myDate.ChangeTime(10,10,10,0); 

但是你可以这样做:

 DateTime myDate = DateTime.Now; myDate = myDate.ChangeTime(10,10,10,0); 
 s = s.Date.AddHours(x).AddMinutes(y).AddSeconds(z); 

通过这种方式,你可以保留你的date,同时插入新的小时,分​​钟和秒钟的一部分,以满足自己的喜好。

DateTime是不可变的types,所以你不能改变它。

但是,您可以根据以前的实例创build一个新的DateTime实例。 就你而言,这听起来像是你需要Date属性,然后你可以添加一个TimeSpan来表示一天的时间。

像这样的东西:

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

一个class轮

 var date = DateTime.Now.Date.Add(new TimeSpan(4, 30, 0)); 

会带回今天的date与时间4:30:00,用任何date对象replaceDateTime.Now

如果已经有时间存储在另一个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); 

TimeOfDay属性是TimeSpan对象,可以传递给Add方法。 而且由于我们使用dateToUsevariables的Date属性,我们只获取date并添加时间跨度。

发生在这个post,因为我正在寻找相同的function,这可能会做什么人想要的。 采取原来的date,并更换时间的一部分

 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/4/15 00:00:00

如果你有像2014/02/05 18:19:51那样的DateTime而只想要2014/02/05,你可以这样做:

 _yourDateTime = new DateTime(_yourDateTime.Year, _yourDateTime.Month, _yourDateTime.Day) 
 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); 

使用Date.Add添加一个New TimeSpan并添加新的时间

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

将.Date添加到您的date将其设置为午夜(00:00)。

 MyDate.Date 

注意等价SQL是CONVERT(DATETIME, CONVERT(DATE, @MyDate))

是什么让这种方法如此好,它是快速打字和易于阅读。 奖金是没有从string转换。

即要将今天的date设置为23:30,请使用:

 DateTime.Now.Date.AddHours(23).AddMinutes(30) 

您当然可以用您select的任何datereplaceDateTime.Now或MyDate。

这里有一个方法可以用来为你做,就像这样使用它

 DateTime newDataTime = ChangeDateTimePart(oldDateTime, DateTimePart.Seconds, 0); 

这里是方法,可能有更好的方法,但我只是鞭打了这一点:

 public enum DateTimePart { Years, Months, Days, Hours, Minutes, Seconds }; public DateTime ChangeDateTimePart(DateTime dt, DateTimePart part, int newValue) { return new DateTime( part == DateTimePart.Years ? newValue : dt.Year, part == DateTimePart.Months ? newValue : dt.Month, part == DateTimePart.Days ? newValue : dt.Day, part == DateTimePart.Hours ? newValue : dt.Hour, part == DateTimePart.Minutes ? newValue : dt.Minute, part == DateTimePart.Seconds ? newValue : dt.Second ); } 

我刚刚遇到这个post,因为我有一个类似的问题,我想设置一个entity framework对象在MVC的时间从视图(datepicker)获取date,所以时间组件是00:00:00,但我需要这是当前的时间。 基于这个post的答案,我想出了:

 myEntity.FromDate += DateTime.Now.TimeOfDay; 
 //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(); 

最简单的解决scheme

 DateTime s = new DateTime(datetime.Year, datetime.Month, datetime.Day, 8, 36, 44); 

如果您需要特定的date和时间格式:

 DateTime s = new DateTime(datetime.Year, datetime.Month, datetime.Day, 8, 36, 44).ToString("yyyy-MM-dd h:mm:ss") 

DateTime.AddSeconds方法在哪里可以添加或减less秒?

当你构造你的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 

请注意,我们必须将每个方法调用的结果“保存”到myDateTimevariables。 这是因为DateTime是不可变的,它的方法只是添加额外的小时/分钟/秒创build新的实例。

如果您需要同时添加小时和分钟(和/或秒),则可以通过将TimeSpan添加到原始DateTime来简化代码:

 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 

这不能解决你的问题吗?

 Dateime dt = DateTime.Now; dt = dt.AddSeconds(10); 

我更喜欢这个:

 DateTime s = //get some datetime; s = new DateTime(s.Year, s.Month,s.Day,s.Hour,s.Minute,0); 
  Using an extencion to DateTime: public enum eTimeFragment { hours, minutes, seconds, milliseconds } public static DateTime ClearTimeFrom(this DateTime dateToClear, eTimeFragment etf) { DateTime dtRet = dateToClear; switch (etf) { case eTimeFragment.hours: dtRet = dateToClear.Date; break; case eTimeFragment.minutes: dtRet = dateToClear.AddMinutes(dateToClear.Minute * -1); dtRet = dtRet.ClearTimeFrom(eTimeFragment.seconds); break; case eTimeFragment.seconds: dtRet = dateToClear.AddSeconds(dateToClear.Second * -1); dtRet = dtRet.ClearTimeFrom(eTimeFragment.milliseconds); break; case eTimeFragment.milliseconds: dtRet = dateToClear.AddMilliseconds(dateToClear.Millisecond * -1); break; } return dtRet; } 

像这样使用:

Console.WriteLine(DateTime.Now.ClearTimeFrom(eTimeFragment.hours))

这必须返回:2016-06-06 00:00:00.000

由于DateTime是不可变的,因此在需要更改date组件时必须创build新实例。 不幸的是,没有内置的function来设置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 s; //s = datevalue s = s.AddMilliseconds(10); s = s.AddMinutes(10); s = s.AddSeconds(10); s = s.AddHours(10); 

您可以在参数中添加+ ve / -ve值。

 s.Add(new TimeSpan(1, 1, 1)); 

最好的解决scheme是:

 currdate.AddMilliseconds(currdate.Millisecond * -1).AddSeconds(currdate.Second * -1).AddMinutes(currdate.Minute * -1).AddHours(currdate.Hour * -1); 

试试这个

 var NewDate = Convert.ToDateTime(DateTime.Now.ToString("dd/MMM/yyyy")+" "+"10:15 PM")/*Add your time here*/; 

这里是一个贫民窟的方式,但它的作品:)

 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));