Добавление времени в DateTime в С#
У меня есть календарь и текстовое поле, которое содержит время суток. Я хочу создать дату-время, которое является комбинацией двух. Я знаю, что могу это сделать, посмотрев часы и монеты, а затем добавив их в календарь DateTime, но это кажется довольно грязным.
Есть ли лучший способ?
Ответы
Ответ 1
Вы можете использовать метод DateTime.Add(), чтобы добавить время к дате.
DateTime date = DateTime.Now;
TimeSpan time = new TimeSpan(36, 0, 0, 0);
DateTime combined = date.Add(time);
Console.WriteLine("{0:dddd}", combined);
Вы также можете создать свой временной интервал синтаксический анализ строки, если это то, что вам нужно сделать.
В качестве альтернативы вы можете использовать другие элементы управления. Вы не упомянули, используете ли вы winforms, wpf или asp.net, но существуют различные элементы выбора даты и времени, которые поддерживают выбор даты и времени.
Ответ 2
Если вы используете два объекта DateTime, один для сохранения даты другой, вы можете сделать следующее:
var date = new DateTime(2016,6,28);
var time = new DateTime(1,1,1,13,13,13);
var combinedDateTime = date.AddTicks(time.TimeOfDay.Ticks);
Пример этого можно найти здесь
Ответ 3
В зависимости от того, как вы форматируете (и проверяете!) дату, введенную в текстовое поле, вы можете сделать это:
TimeSpan time;
if (TimeSpan.TryParse(textboxTime.Text, out time))
{
// calendarDate is the DateTime value of the calendar control
calendarDate = calendarDate.Add(time);
}
else
{
// notify user about wrong date format
}
Обратите внимание, что TimeSpan.TryParse ожидает, что строка будет в формате "hh: mm" (необязательные секунды).
Ответ 4
Использование https://github.com/FluentDateTime/FluentDateTime
DateTime dateTime = DateTime.Now;
DateTime combined = dateTime + 36.Hours();
Console.WriteLine(combined);
Ответ 5
Объедините оба. Средство выбора даты также поддерживает время выбора.
Вам просто нужно изменить Format-Property и, возможно, CustomFormat-Property.
Ответ 6
DateTime newDateTime = dtReceived.Value.Date.Add(TimeSpan.Parse(dtReceivedTime.Value.ToShortTimeString()));