如何改变date时间?
如何在DateTime
variables中单独更改时间?
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
:它们检索反映这些事件发生的当前系统时间。
这是促使我开始现在可以生产的野田时间项目的那种东西。 它的ZonedDateTime
types是通过将其链接到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
方法。 而且由于我们使用dateToUse
variables的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
请注意,我们必须将每个方法调用的结果“保存”到myDateTime
variables。 这是因为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));