Korzystanie z .NET 3.5
Chcę ustalić, czy bieżący czas mieści się w przedziale czasu.
Póki co mam aktualny czas:
DateTime currentTime = new DateTime();
currentTime.TimeOfDay;
Nie wiem, jak przekonwertować i porównać zakres czasu. Czy to zadziała?
if (Convert.ToDateTime("11:59") <= currentTime.TimeOfDay
&& Convert.ToDateTime("13:01") >= currentTime.TimeOfDay)
{
//match found
}
UPDATE1: Dziękuję wszystkim za sugestie. Nie znałem funkcji TimeSpan.
Odpowiedzi:
Aby sprawdzić porę dnia:
Dla czasów bezwzględnych użyj:
źródło
Kilka dobrych odpowiedzi tutaj, ale żadna nie obejmuje przypadku, gdy godzina rozpoczęcia przypada w innym dniu niż godzina zakończenia. Jeśli chcesz przekroczyć granicę dnia, może pomóc coś takiego:
Zwróć uwagę, że w tym przykładzie granice czasu są włącznie i nadal zakłada się, że różnica między
start
a wynosi mniej niż 24 godzinystop
.źródło
11:57 pm
i to zadziałało:TimeSpan time = new TimeSpan(23, 57, 00); DateTime date_with_time = mydate.Add(time);
DateTime
mieści się w określonych godzinach pracy. Godziny pracy mogą przypadać tego samego dnia, ale mogą również obejmować dwa dni (np. 15:00 - 1:00 godziny pracy).jeśli naprawdę chcesz przeanalizować ciąg w TimeSpan, możesz użyć:
źródło
11:57 pm
i to zadziałało:TimeSpan time = new TimeSpan(23, 57, 00); DateTime date_with_time = mydate.Add(time);
Prosta funkcja rozszerzenia do tego:
źródło
start <= end
należy zmienić kontrole,start < end
a innym założeniem może być to, że jest to tego samego dnia, ale jeśli tak jest, prawdopodobnie zakończy się niepowodzeniem, jeśli używasz Now.TimeOfDay, ponieważ obejmuje milisekundy i powoduje, że jest poza zakresem.Spróbuj użyć obiektu TimeRange w C #, aby osiągnąć swój cel.
Oto, gdzie mam ten przykład użycia TimeRange
źródło
TimeOfDay
Własność zwracaTimeSpan
wartość.Wypróbuj następujący kod:
Ponadto
new DateTime()
jest taki sam jakDateTime.MinValue
i zawsze będzie równy1/1/0001 12:00:00 AM
. (Typy wartości nie mogą mieć niepustych wartości domyślnych), którego chcesz użyćDateTime.Now
.źródło
Jesteś bardzo blisko, problem polega na tym, że porównujesz DateTime z TimeOfDay. To, co musisz zrobić, to dodać właściwość .TimeOfDay na końcu funkcji Convert.ToDateTime ().
źródło
Czy będzie to prostsze do obsługi przypadku granicy dnia? :)
źródło
Używając Linqa możemy to uprościć w ten sposób
źródło
źródło