Добавление времени к DateTime в C#

У меня есть календарь и текстовое поле, которое содержит время суток. Я хочу создать дату и время, которая является комбинацией двух. Я знаю, что могу сделать это путем рассмотрения часов и минут и затем добавления их к календарю DateTime, но это кажется довольно грязным.

Существует ли лучший путь?

58
задан Peter Mortensen 23 April 2015 в 15:32
поделиться

4 ответа

У меня недостаточно контекста, чтобы дать правильный ответ, но я предложу вам максимально сделать код неизменным . Используйте поля public final . Больше не получает или setters : каждое поле должно быть определено конструктором . Ваш код короче, удобочитаем и не позволяет писать код с побочными эффектами.

Это не мешает передавать пустые аргументы конструктору, хотя... Вы по-прежнему можете проверить каждый аргумент в соответствии с предложением @ cletus, но я предложу вам бросить IllegalArgumentException вместо StartPointerException , который не дает нового намека на то, что вы сделали.

В любом случае, это то, что я делаю как можно больше, и это значительно улучшило мой код (читаемость, стабильность). Все в моей команде так и делают, и мы этим очень довольны. Мы узнали, что когда мы пытаемся написать какой-то erlang код, где все незыблемо.

Надеюсь, это поможет.

-121--148â2-

Для меня понятие является тем же или, по крайней мере, предназначено быть тем же самым, , но фактическое использование не является .

Когда мы говорим о указателях или ссылке, мы говорим о концепции. Эта переменная «указывает на» или ее «ссылка» на что-то другое, что-то, что хранится где-то еще.

Если я использую эту ссылку, например, обновляя значение, я фактически обновляю объект ссылки, объект, на который указывает переменная. Если на объект ссылаются из двух разных мест, я фактически обновлю одно и то же из обоих мест.

Таким образом, концепция может быть связана с вашим адресом в реальном мире, это просто способ ссылаться на другую вещь, и эта ссылка может быть разделена, как многие люди, имеющие мой адрес.

Разница больше в том, как он был использован и что разрешено языком. Следует отметить, что детали реализации ссылки или указателя не являются неявными в самой концепции. В C #, которое продолжает быть истинным.

Ссылка является ссылкой, и, следовательно, просто не имеет смысла суммировать две ссылки или добавлять одну к ссылке... что это вообще значит? Я не могу добавить два домашних адреса (как Бейкер-стрит + Домашняя улица)...

В C++ детализация реализации ссылки фактически является ссылкой. Таким образом, указатель является не просто указателем, его также (и используется в качестве) адреса памяти. Таким образом, например, можно добавить к указателям, потому что на самом деле имеет смысл добавить два адреса памяти, чтобы получить другой, или добавить 4 к адресу памяти. Таким образом, на языке C++ указатель перестал быть понятием и стал именем, данным фактической детали реализации .

Поэтому в C # указатели и ссылки различны. Потому что через семантически смысл довольно похож, они хотели отличить от старого понятия C и C++,где указатель стал таким же, как адрес памяти.

Я рекомендую вам прочитать статью « Ссылки не адреса » от Эрик Липперт , где я считаю, что он делает большую работу, объясняя различия.

-121--3823413-

Для добавления времени к дате можно использовать метод 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, но есть различные элементы управления выбора даты и времени, которые поддерживают выбор даты и времени.

96
ответ дан 24 November 2019 в 18:53
поделиться

Для добавления времени к дате можно использовать метод 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, но есть различные элементы управления выбора даты и времени, которые поддерживают выбор даты и времени.

-121--998316-

Наши крупные проекты разработки # включают файлы cc из файла cc для классов с сотнями методов. Я не согласился с этим, но были причины.

-121--3772242-

Объедините оба. Средство выбора даты и времени также поддерживает время комплектования.

Необходимо просто изменить свойство Format-Property и, возможно, свойство CustomFormat-Property.

0
ответ дан 24 November 2019 в 18:53
поделиться

В зависимости от того, как вы форматируете (и проверяете!) Дата, введенная в текстовом поле, вы можете сделать это:

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.triparse ожидает, что строка быть в формате HH: MM '(необязательные секунды).

3
ответ дан 24 November 2019 в 18:53
поделиться

Using https://github.com/FluentDateTime/FluentDateTime

DateTime dateTime = DateTime.Now;
DateTime combined = dateTime + 36.Hours();
Console.WriteLine(combined);
2
ответ дан 24 November 2019 в 18:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: