Найти, если текущее время попадает в диапазон времени
140883 просмотра
10 ответа
Использование .NET 3.5
Я хочу определить, попадает ли текущее время во временной диапазон.
Пока у меня есть время:
DateTime currentTime = new DateTime();
currentTime.TimeOfDay;
Я не понимаю, как преобразовать и сравнить временной диапазон. Будет ли это работать?
if (Convert.ToDateTime("11:59") <= currentTime.TimeOfDay
&& Convert.ToDateTime("13:01") >= currentTime.TimeOfDay)
{
//match found
}
ОБНОВЛЕНИЕ 1: Спасибо всем за ваши предложения. Я не был знаком с функцией TimeSpan.
Автор: John M Источник Размещён: 12.11.2019 09:36Ответы (10)
234 плюса
Для проверки времени суток используйте:
TimeSpan start = new TimeSpan(10, 0, 0); //10 o'clock
TimeSpan end = new TimeSpan(12, 0, 0); //12 o'clock
TimeSpan now = DateTime.Now.TimeOfDay;
if ((now > start) && (now < end))
{
//match found
}
Для абсолютного времени используйте:
DateTime start = new DateTime(2009, 12, 9, 10, 0, 0)); //10 o'clock
DateTime end = new DateTime(2009, 12, 10, 12, 0, 0)); //12 o'clock
DateTime now = DateTime.Now;
if ((now > start) && (now < end))
{
//match found
}
Автор: Frank Bollack
Размещён: 01.10.2009 03:08
105 плюса
Здесь есть несколько хороших ответов, но ни один из них не охватывает случай, когда ваше время начала не совпадает с вашим временем окончания. Если вам нужно пересечь дневную границу, то может помочь что-то вроде этого:
TimeSpan start = TimeSpan.Parse("22:00"); // 10 PM
TimeSpan end = TimeSpan.Parse("02:00"); // 2 AM
TimeSpan now = DateTime.Now.TimeOfDay;
if (start <= end)
{
// start and stop times are in the same day
if (now >= start && now <= end)
{
// current time is between start and stop
}
}
else
{
// start and stop times are in different days
if (now >= start || now <= end)
{
// current time is between start and stop
}
}
Обратите внимание, что в этом примере временные границы являются инклюзивными, и это все равно предполагает разницу менее чем в 24 часа между start
и stop
.
17 плюса
if (new TimeSpan(11,59,0) <= currentTime.TimeOfDay && new TimeSpan(13,01,0) >= currentTime.TimeOfDay)
{
//match found
}
если вы действительно хотите проанализировать строку в TimeSpan, тогда вы можете использовать:
TimeSpan start = TimeSpan.Parse("11:59");
TimeSpan end = TimeSpan.Parse("13:01");
Автор: JDunkerley
Размещён: 01.10.2009 03:08
15 плюса
Простая маленькая функция расширения для этого:
public static bool IsBetween(this DateTime now, TimeSpan start, TimeSpan end)
{
var time = now.TimeOfDay;
// If the start time and the end time is in the same day.
if (start <= end)
return time >= start && time <= end;
// The start time and end time is on different days.
return time >= start || time <= end;
}
Автор: André Snede Kock
Размещён: 11.11.2016 09:50
13 плюса
Попробуйте использовать объект TimeRange в C # для достижения цели.
TimeRange timeRange = new TimeRange();
timeRange = TimeRange.Parse("13:00-14:00");
bool IsNowInTheRange = timeRange.IsIn(DateTime.Now.TimeOfDay);
Console.Write(IsNowInTheRange);
Вот где я получил этот пример использования TimeRange
Автор: stewsha Размещён: 01.10.2009 03:156 плюса
TimeOfDay
Свойство возвращает TimeSpan
значение.
Попробуйте следующий код:
TimeSpan time = DateTime.Now.TimeOfDay;
if (time > new TimeSpan(11, 59, 00) //Hours, Minutes, Seconds
&& time < new TimeSpan(13, 01, 00)) {
//match found
}
Кроме того, так new DateTime()
же, как DateTime.MinValue
и всегда будет равен 1/1/0001 12:00:00 AM
. (Типы значений не могут иметь непустые значения по умолчанию). Вы хотите использовать DateTime.Now
.
2 плюса
Вы очень близки, проблема в том, что вы сравниваете DateTime с TimeOfDay. Что вам нужно сделать, это добавить свойство .TimeOfDay в конец ваших функций Convert.ToDateTime ().
Автор: Michael La Voie Размещён: 01.10.2009 03:092 плюса
Будет ли это проще для обработки случая дневной границы? :)
TimeSpan start = TimeSpan.Parse("22:00"); // 10 PM
TimeSpan end = TimeSpan.Parse("02:00"); // 2 AM
TimeSpan now = DateTime.Now.TimeOfDay;
bool bMatched = now.TimeOfDay >= start.TimeOfDay &&
now.TimeOfDay < end.TimeOfDay;
// Handle the boundary case of switching the day across mid-night
if (end < start)
bMatched = !bMatched;
if(bMatched)
{
// match found, current time is between start and end
}
else
{
// otherwise ...
}
Автор: Elliott
Размещён: 27.10.2016 02:12
0 плюса
Используя Linq, мы можем упростить это
Enumerable.Range(0, (int)(to - from).TotalHours + 1)
.Select(i => from.AddHours(i)).Where(date => date.TimeOfDay >= new TimeSpan(8, 0, 0) && date.TimeOfDay <= new TimeSpan(18, 0, 0))
Автор: Edu Cielo
Размещён: 27.07.2016 09:32
0 плюса
using System;
public class Program
{
public static void Main()
{
TimeSpan t=new TimeSpan(20,00,00);//Time to check
TimeSpan start = new TimeSpan(20, 0, 0); //8 o'clock evening
TimeSpan end = new TimeSpan(08, 0, 0); //8 o'clock Morning
if ((start>=end && (t<end ||t>=start))||(start<end && (t>=start && t<end)))
{
Console.WriteLine("Mached");
}
else
{
Console.WriteLine("Not Mached");
}
}
}
Автор: Patel Vishal
Размещён: 01.08.2019 10:33
Вопросы из категории :
- c# Преобразовать десятичную в двойную?
- c# Как рассчитать чей-то возраст в C #?
- c# Как вы сортируете словарь по значению?
- c# В чем разница между int и Integer в Java и C #?
- c# Как создать новый экземпляр объекта из Типа
- c# Datatable против Dataset
- datetime DateTime.Now лучший способ измерить производительность функции?
- datetime Как я могу получить DateTime для начала недели?
- datetime Как преобразовать DateTime в VarChar
- datetime Как преобразовать локальное время в UTC в Python?
- datetime Отображение даты / времени в формате локали пользователя и смещения времени
- timespan Можете ли вы округлить объект .NET TimeSpan?
- timespan Как мне преобразовать TimeSpan в форматированную строку?
- timespan Найти, если текущее время попадает в диапазон времени
- timespan вычисление разницы в месяцах между двумя датами
- timespan Конвертировать отметки .NET в SQL Server DateTime
- timespan C # Метод суммирования данных чч: мм ???