Вы используете свойство Date
, которое дает вам полночь в указанный DateTime. Вы просто хотите сейчас:
DateTime now = DateTime.Now;
int hour = now.Hour;
int minute = now.Minute;
DateTime date = now.Date; // If you really need it
Обратите внимание, что мой код вызывает только DateTime.Now
один раз , а не один раз для часов, а затем один раз для минут 1 . Это означает, что если вы позвоните ему около (скажем) 8 утра, вы можете получить 7:59 или 8:00 - но вы не получите 7:00 или 8:59, что вы могли бы получить, если бы у вас был любой из них:
// Bad option 1 (could get 7:00)
int hour = DateTime.Now.Hour;
// Imagine the clock rolls over now...
int minute = DateTime.Now.Minute;
// Bad option 1 (could get 8:59)
int minute = DateTime.Now.Minute;
// Imagine the clock rolls over now...
int hour = DateTime.Now.Hour;
Вам следует также подумать о том, чтобы вообще не использовать DateTime.Now
напрямую. У него две проблемы:
- Возвращает время в местном часовом поясе; это, вероятно, хорошо для настольных приложений, но плохо для серверных приложений
- Сложно проверить
Если вы создаете интерфейс IClock
или что-то подобное, у которого есть метод или свойство, чтобы дать вам текущее время UTC, вы всегда можете преобразовать его в местное время, если хотите (однозначно, что не соответствует действительности в обратном порядке) и вы также можете внедрить поддельную реализацию в целях тестирования.
РЕДАКТИРОВАТЬ: короткая, но полная программа, чтобы доказать, что да, этот код действительно работает работает:
using System;
public class Test
{
static void Main(string[] args)
{
DateTime now = DateTime.Now;
int hour = now.Hour;
int minute = now.Minute;
Console.WriteLine(hour);
Console.WriteLine(minute);
}
}
На моем аппарате прямо сейчас печатается 7, а затем 35. Если он печатает 0, а затем 0, то на вашем аппарате должна быть полночь.
1 Как вы можете заметить, я добавил комментарий ко всем ответам, которые продолжают это делать. Извиняюсь, если это выглядит как спам, но я хотел привлечь внимание тех, кто отвечает - это распространенная ошибка, которую я хотел бы помочь устранить. Вполне возможно, что без комментариев постеры просто переместились бы, даже не посмотрев снова ...