26 ответов:
вы не можете изменить значение даты и времени - оно неизменяемо. Однако, вы можете изменить переменную новое значение. Самый простой способ сделать это, чтобы изменить только время, - создать TimeSpan с соответствующим временем и использовать DateTime.Дата собственности:
DateTime s = ...; TimeSpan ts = new TimeSpan(10, 30, 0); s = s.Date + ts;
sсейчас будет та же дата, но в 10.30.отметим, что
DateTimeигнорирует переходы на летнее время, представляя "наивное" григорианское время в обоих направлениях (см. раздел Примечания в элементDateTimedocs). Исключение составляют только.Nowи.Today: они извлекают текущее системное время, которое отражает эти события по мере их возникновения.это то, что побудило меня начать Нода Времени проект, который теперь готов к производству. Его
ZonedDateTimeтип знать связав его вtzзапись в базе данных.
хорошо, я ныряю с моим предложением, метод расширения:
звоните: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);таким образом, вы сохраняете свою дату, вставляя новую часть часов, минут и секунд по своему вкусу.
один лайнер
var date = DateTime.Now.Date.Add(new TimeSpan(4, 30, 0));вернет сегодняшнюю дату со временем 4: 30: 00, заменит DateTime.Теперь с любым объектом даты
DateTime является неизменяемым типом, поэтому вы не можете изменить его.
однако можно создать новый экземпляр DateTime на основе предыдущего экземпляра. В вашем случае это звучит так, как будто вам нужно свойство Date, и вы можете добавить TimeSpan, который представляет время суток.
что-то вроде этого:
var newDt = s.Date + TimeSpan.FromHours(2);
если у вас уже есть время в другой
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);The
TimeOfDayсвойство
случилось на этом посту, как я искал ту же функциональность это может сделать то, что парень хотел. Возьмите исходную дату и замените часть времени
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/04/15 00:00:00
простое решение :
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);и если вам нужен определенный формат даты и времени :
s = new DateTime(s.Year, s.Month, s.Day, 8, 36, 44).ToString("yyyy-MM-dd h:mm:ss");
Если у вас есть дата-время, как 2014/02/05 18:19: 51 и хотите только 2014/02/05, вы можете сделать это:
_yourDateTime = new DateTime(_yourDateTime.Year, _yourDateTime.Month, _yourDateTime.Day)
добавить .Дата для вашей даты устанавливает его в полночь (00:00).
MyDate.DateПримечание эквивалентный SQL-это
CONVERT(DATETIME, CONVERT(DATE, @MyDate))что делает этот метод настолько хорошим, что он быстро печатается и легко читается. Бонус заключается в том, что нет преобразования из строк.
т. е. чтобы установить сегодняшнюю дату на 23: 30, используйте:
DateTime.Now.Date.AddHours(23).AddMinutes(30)вы можете, конечно, заменить DateTime.Сейчас или MyDate с любой даты по вашему выбору.
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))
вот метод, который вы могли бы использовать, чтобы сделать это для вас, используйте его так
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 ); }
Я только что столкнулся с этим сообщением, потому что у меня была аналогичная проблема, когда я хотел установить время для объекта Entity Framework в MVC, который получает дату из представления (datepicker), поэтому компонент времени-00:00:00, но мне нужно, чтобы это было текущее время. На основе ответов в этом посте я придумал:
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();
при создании
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является неизменяемым, и его методы просто создают новые экземпляры с дополнительными добавлены часы / минуты / секунды.Если вам нужно добавить как часы, так и минуты (и / или секунды) и в то же время, вы можете упростить код, добавив
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
Я предпочитаю этот:
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; }использовать такой:
С
DateTimeявляется неизменяемым, новый экземпляр должен быть создан, когда компонент даты должен быть изменен. К сожалению, нет встроенного функционала для установки отдельных компонентов aDateTimeэкземпляра.используя следующие методы расширения
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));
самое лучшее решение-это:
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));
Comments