Как я могу изменить только время в моей DateTime
переменной "s"?
DateTime s = some datetime;
Вы не можете изменить значение DateTime - оно неизменно. Однако вы можете изменить переменную на новое значение. Самый простой способ сделать это, чтобы изменить только время, это создать TimeSpan с соответствующим временем и использовать свойство DateTime.Date:
DateTime s = ...;
TimeSpan ts = new TimeSpan(10, 30, 0);
s = s.Date + ts;
s
будет та же дата, но в 10:30 утра.
Обратите внимание, что DateTime
не учитываются переходы на летнее время, представляющие «наивное» григорианское время в обоих направлениях (см. Раздел «Примечания» в DateTime
документации ). Единственными исключениями являются .Now
и .Today
: они получают текущее системное время, которое отражает эти события по мере их возникновения.
Именно это побудило меня начать проект Noda Time , который сейчас готов к производству. Его ZonedDateTime
тип делается «осведомленным» , связывая его с tz
записью базы данных .
Add
нулевой промежуток времени? Ваше выражение эквивалентноs.Date
, но дольше ...DateTime
с (один для даты и один для времени), вы можете сделать это:var result = date.Date + time.TimeOfDay;
time
не работает , и не должна бытьDateTime
. (Конечно, я бы использовал Noda Time, но ...)Хорошо, я погружаюсь с моим предложением, метод расширения:
Затем позвоните:
Важно отметить, что это расширение возвращает новый объект даты, поэтому вы не можете сделать это:
Но вы можете сделать это:
источник
Datetime.Today.Add(time.TimeOfDay)
. Это связано с тем, что внутренне конструктор не делает никаких корректировок на основе календаря, за исключением учета високосного года для части даты. Т.е.DateTime
это «наивная» реализация в терминахdatetime
модуля Python .Таким образом, вы сохраняете дату, добавляя новые часы, минуты и секунды по своему вкусу.
источник
.AddMilliseconds()
если это необходимо.один лайнер
вернул бы текущую дату со временем 4:30:00, заменив DateTime.Now на любой объект даты
источник
DateTime является неизменяемым типом, поэтому вы не можете его изменить .
Однако вы можете создать новый экземпляр DateTime на основе вашего предыдущего экземпляра. В вашем случае это звучит так, как будто вам нужно свойство Date, и вы можете добавить TimeSpan, который представляет время дня.
Что-то вроде этого:
источник
Если у вас уже есть время, сохраненное в другом
DateTime
объекте, вы можете использоватьAdd
метод.TimeOfDay
Свойство являетсяTimeSpan
объектом и может быть переданAdd
методу. И поскольку мы используемDate
свойствоdateToUse
переменной, мы получаем только дату и добавляем промежуток времени.источник
Самое простое решение:
И если вам нужен конкретный формат даты и времени:
источник
Выполнено: сегодня = 9/04/15 00:00:00
источник
Произошло с этим постом, когда я искал ту же функциональность, которая могла бы сделать то, что хотел парень. Возьмите оригинальную дату и замените часть времени
источник
Так как
DateTime
является неизменным, новый экземпляр должен быть создан, когда необходимо изменить компонент даты. К сожалению, нет встроенной функциональности для установки отдельных компонентовDateTime
экземпляра.Используя следующие методы расширения
Вы можете установить отдельные
DateTime
компоненты, такие какисточник
Если у вас есть DateTime, например 2014/02/05 18:19:51 и вы хотите просто 2014/02/05, вы можете сделать это:
источник
Добавление. Дата к вашей дате устанавливает его на полночь (00:00).
Примечание . Эквивалентный SQL
CONVERT(DATETIME, CONVERT(DATE, @MyDate))
Что делает этот метод настолько хорошим, так это то, что он быстро набирается и легко читается. Бонус в том, что нет конвертации из строк.
Т.е. чтобы установить сегодняшнюю дату на 23:30, используйте:
Конечно, вы можете заменить DateTime.Now или MyDate на любую дату по вашему выбору.
источник
На самом деле, вы не можете изменить время, как только оно будет создано. Но вы можете легко создать его с помощью многих конструкторов: https://docs.microsoft.com/en-us/dotnet/api/system.datetime.-ctor?view=netframework-4.7.2
Например, если вы хотите создать DateTime, изменяющий Seconds, вы можете просто сделать это:
источник
источник
Используйте
Date.Add
и добавьтеNew TimeSpan
с новым временем, которое вы хотите добавитьисточник
Когда вы создаете свой
DateTime
объект, используйте конструктор, который позволяет вам указать время:Если у вас уже есть
DateTime
объект и вы хотите изменить время, вы можете добавить минуты, часы или секунды,DateTime
используя простые методы:Обратите внимание, как мы должны «сохранять» результат каждого вызова метода в
myDateTime
переменной. Это связано с тем, чтоDateTime
объект является неизменным, а его методы просто создают новые экземпляры с добавлением дополнительных часов / минут / секунд.Если вам нужно добавить часы и минуты (и / или секунды) и одно и то же время, вы можете упростить код, добавив вместо этого
TimeSpan
к оригиналуDateTime
:Если вы хотите установить абсолютные часы / минуты / секунды, а не добавлять к существующим значениям, вы можете использовать вышеупомянутый
DateTime
конструктор и повторно использовать значения для года / месяца / дня из ранее:источник
Вот метод, который вы могли бы использовать, чтобы сделать это для вас, используйте его следующим образом
Вот метод, возможно, есть лучший способ, но я только что это сделал:
источник
Я только что наткнулся на этот пост, потому что у меня была похожая проблема, из-за которой я хотел установить время для объекта Entity Framework в MVC, который получает дату из представления (datepicker), поэтому компонент времени - 00:00:00, но мне нужно это будет текущее время. На основании ответов в этом посте я придумал:
источник
источник
Вы можете назначить начальное значение новому
DateTime
значению разными способами:Метод расширения
DateTime
затем с помощью
ChangeTime
:используя методы Add
используя Timespan
используя начальное значение
источник
Что не так с методом DateTime.AddSeconds, где вы можете добавлять или вычитать секунды?
источник
Вы можете добавить + ve / -ve значения в параметре.
источник
Разве это не решает ваши проблемы?
источник
Я предпочитаю это:
источник
Используйте как это:
Console.WriteLine (DateTime.Now.ClearTimeFrom (eTimeFragment.hours))
это должно вернуть: 2016-06-06 00: 00: 00.000
источник
Лучшее решение:
источник
Попробуй это
источник
это гетто, но оно работает :)
источник
dt.AddSeconds(0-dt.Seconds).AddSeconds(newSecondsValue)
но не рекомендовал бы это.