Вы используете свойство Date
, которое дает вам полночь в заданное время. Вы просто хотите Сейчас:
DateTime now = DateTime.Now;
int hour = now.Hour;
int minute = now.Minute;
DateTime date = now.Date; // If you really need it
Обратите внимание, что мой код только вызывает DateTime.Now
раз, а не один раз в течение нескольких часов, а затем один раз в течение минут . Это означает, что если вы назовете это близко (скажем) 8 AM, вы можете получить 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, вы можете всегда преобразовать это в локальное время, если хотите (однозначно, что неверно в обратном порядке), и вы также можете ввести поддельную реализацию для целей тестирования.
EDIT: короткая, но полная программа, чтобы доказать, что да, этот код действительно делает работы:
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, то на вашей машине должно быть полночь.
Как вы можете заметить, я добавил комментарий к ответам на все вопросы, которые продолжают делать это. Извиняюсь, если это похоже на спам, но я хотел привлечь внимание этих ответчиков - это распространенная ошибка, и я хотел бы помочь искоренить ее. Возможно, что без комментариев, плакаты только что переехали бы, не глядя снова ...
Несмотря на теги, это вообще не имеет никакого отношения к языку C#. Это просто .NET. (Исправлено сейчас.) –
Я знаю, что у вас уже есть правильный ответ, но для того, чтобы узнать вашу проблему, это был «DateTime.Now.Date», вы должны были использовать «DateTime.Now» –