C# 如何检查DateTime.Now是否仅在时间部分的两个给定日期时间之间?
对于我的应用程序,我需要知道C# 如何检查DateTime.Now是否仅在时间部分的两个给定日期时间之间?,c#,C#,对于我的应用程序,我需要知道Now()是否介于两个值之间 用户可以设置开始和结束时间,这样他就不会被通知打扰(例如在夜间) 因此,如果您有两个时间选择器s(开始时间和结束时间),用户可以设置 假设用户为StartTime设置22:00,为EndTime设置07:00(这将覆盖夜间) 如何检查DateTime.Now是否在所选开始时间和结束时间之间 编辑: 我只想让它在小时和分钟部分起作用。因此,如果用户设置开始和结束时间,这应该适用于每晚 DateTime nowDate = DateTime.
Now()
是否介于两个值之间
用户可以设置开始和结束时间,这样他就不会被通知打扰(例如在夜间)
因此,如果您有两个时间选择器
s(开始时间和结束时间),用户可以设置
假设用户为StartTime
设置22:00
,为EndTime
设置07:00
(这将覆盖夜间)
如何检查DateTime.Now
是否在所选开始时间和结束时间之间
编辑:
我只想让它在小时和分钟部分起作用。因此,如果用户设置开始和结束时间,这应该适用于每晚
DateTime nowDate = DateTime.Now;
// set these to today + time from time picker
DateTime startDate = new DateTime(nowDate.Year, nowDate.Month, nowDate.Day,
selectedStart.Hour, selectedStart.Minute, 0);
DateTime endDate = new DateTime(nowDate.Year, nowDate.Month, nowDate.Day,
selectedEnd.Hour, selectedEnd.Minute, 0);
bool isBetween = nowDate < endDate && nowDate > startDate;
这是一把小提琴:
完整代码:
using System;
public class Program
{
public static void Main()
{
var start = new DateTime(1, 1, 1, 9, 0, 0);
var end = new DateTime(1, 1, 1, 17, 0, 0);
Console.WriteLine("{0} - Too early", TimeBetween(new DateTime(2014, 1, 1, 08, 59, 59, 999), start, end));
Console.WriteLine("{0} - On start time exclusive", TimeBetween(new DateTime(2014, 1, 1, 09, 00, 00, 000), start, end, false));
Console.WriteLine("{0} - On start time inclusive", TimeBetween(new DateTime(2014, 1, 1, 09, 00, 00, 000), start, end));
Console.WriteLine("{0} - After start time", TimeBetween(new DateTime(2014, 1, 1, 09, 00, 00, 001), start, end));
Console.WriteLine("{0} - Before end time", TimeBetween(new DateTime(2014, 1, 1, 16, 59, 59, 999), start, end));
Console.WriteLine("{0} - On end time inclusive", TimeBetween(new DateTime(2014, 1, 1, 17, 00, 00, 000), start, end));
Console.WriteLine("{0} - On end time exclusive", TimeBetween(new DateTime(2014, 1, 1, 17, 00, 00, 000), start, end, false));
Console.WriteLine("{0} - Too late", TimeBetween(new DateTime(2014, 1, 1, 17, 00, 00, 001), start, end));
}
public static bool TimeBetween(DateTime check, DateTime start, DateTime end, bool inclusive = true)
{
var from = new DateTime(check.Year, check.Month, check.Day, start.Hour, start.Minute, start.Second, start.Millisecond);
var to = new DateTime(check.Year, check.Month, check.Day, end.Hour, end.Minute, end.Second, end.Millisecond);
if (inclusive)
return from <= check && to >= check;
return from < check && to > check;
}
}
使用系统;
公共课程
{
公共静态void Main()
{
var start=newdatetime(1,1,1,9,0,0);
var end=新的日期时间(1,1,1,17,0,0);
Console.WriteLine(“{0}-太早了”,TimeBetween(新的日期时间(2014,1,1,08,59,59999),start,end));
Console.WriteLine(“{0}-On start time exclusive”,TimeBetween(新的日期时间(2014,1,1,09,00,00,000),start,end,false));
Console.WriteLine(“{0}-包括开始时间”),TimeBetween(新的日期时间(2014,1,1,09,00,00,000),start,end));
Console.WriteLine(“{0}-在开始时间之后”,TimeBetween(新的日期时间(2014,1,1,09,00,00,001),start,end));
Console.WriteLine(“{0}-结束时间之前”),TimeBetween(新的日期时间(2014,1,1,16,59,59999),start,end));
Console.WriteLine(“{0}-On-end-time inclusive”),TimeBetween(新的日期时间(2014,1,1,17,00,00,000),start,end);
Console.WriteLine(“{0}-On-end-time-exclusive”)、TimeBetween(新的日期时间(2014,1,1,17,00,00,000)、start、end、false);
Console.WriteLine(“{0}-太晚了”,TimeBetween(新的日期时间(2014,1,1,17,00,00,001),start,end));
}
公共静态bool TimeBetween(日期时间检查、日期时间开始、日期时间结束,bool inclusive=true)
{
var from=新日期时间(check.Year,check.Month,check.Day,start.Hour,start.Minute,start.Second,start.millis秒);
var to=新日期时间(check.Year,check.Month,check.Day,end.Hour,end.Minute,end.Second,end.millis秒);
若有(含)
从返回=检查;
从检查返回;
}
}
重复
DateTime start=newdatetime(2009,12,9,10,0,0));
DateTime end=新的日期时间(2009,12,10,12,0,0));
DateTime now=DateTime.now;
如果((现在>开始)和((现在<结束))
{
//找到匹配项
}
时间跨度,再一次,取自dupe
TimeSpan start = new TimeSpan(10, 0, 0);
TimeSpan end = new TimeSpan(12, 0, 0);
TimeSpan now = DateTime.Now.TimeOfDay;
if ((now > start) && (now < end))
{
//match found
}
TimeSpan start=新的TimeSpan(10,0,0);
TimeSpan结束=新的TimeSpan(12,0,0);
TimeSpan now=DateTime.now.TimeOfDay;
如果((现在>开始)和((现在<结束))
{
//找到匹配项
}
首先,您需要将所有内容转换为相同的单位(我们将使用TimeSpan
),然后您需要查看开始-结束时间是否跨越午夜,最后根据检查结果进行比较:
// convert everything to TimeSpan
TimeSpan start = new TimeSpan(22, 0, 0);
TimeSpan end = new TimeSpan(07, 0, 0);
TimeSpan now = DateTime.Now.TimeOfDay;
// see if start comes before end
if (start < end)
return start <= now && now <= end;
// start is after end, so do the inverse comparison
return !(end < now && now < start);
直接比较一下
如果(date>startdate&&date
开始时间
、结束时间
和现在
放入时间跨度
:
if (StartTime > EndTime)
{
// the range crosses midnight, do the comparisons independently
return (StartTime < Now) || (Now < EndTime);
}
else
{
// the range is on the same day, both comparisons must be true
return StartTime < Now && Now < EndTime;
}
if(开始时间>结束时间)
{
//范围跨越午夜,独立进行比较
返回(开始时间<现在)| |(现在<结束时间);
}
其他的
{
//范围在同一天,两个比较必须为真
返回StartTime
公共静态bool isCurrenctDateBetween(DateTime fromtate,DateTime toDate)
{
DateTime curent=DateTime.Now.Date;
如果(fromDate.CompareTo(toDate)>=1)
{
MessageBox.Show(“开始日期不应大于结束日期”,“日期范围”,MessageBoxButton.ok取消,MessageBoxImage.Warning);
}
int cd_fd=当前比较(起始日期);
int cd_td=当前比较(toDate);
如果(cd|u fd==0 | cd|u td==0)
{
返回true;
}
如果(cd_fd>=1&&cd_td我使用它,那么您可以直接传递日期时间:
public static bool TimeBetween(DateTime time, DateTime startDateTime, DateTime endDateTime)
{
// get TimeSpan
TimeSpan start = new TimeSpan(startDateTime.Hour, startDateTime.Minute, 0);
TimeSpan end = new TimeSpan(endDateTime.Hour, endDateTime.Minute, 0);
// convert datetime to a TimeSpan
TimeSpan now = time.TimeOfDay;
// see if start comes before end
if (start < end)
return start <= now && now <= end;
// start is after end, so do the inverse comparison
return !(end < now && now < start);
}
public static bool TimeBetween(DateTime-time、DateTime-startDateTime、DateTime-endDateTime)
{
//获取时间跨度
TimeSpan开始=新的TimeSpan(startDateTime.Hour,startDateTime.Minute,0);
TimeSpan end=新的TimeSpan(endDateTime.Hour,endDateTime.Minute,0);
//将日期时间转换为时间跨度
TimeSpan now=time.TimeOfDay;
//看看开始是否早于结束
如果(开始<结束)
return start我认为OP只想使用时间部分,而忽略日期部分这仍然不好;请参阅Gabe和yhw42的答案。无论日期如何,这都会起作用,对吗?因此,如果用户设置时间和日期,这将始终起作用?@Niels。正确。如果存储“start=2012年1月10日09:00”以上代码在任何一天都有效。不,请参阅Gabe和yhw42的答案,@Niels。恐怕在半打答案中,我的答案是唯一适用于您的示例时间的答案。您能详细说明原因吗?您如何获得日期?请参阅Gabe和yhw42的答案。非常好。谢谢Gabe。
bool TimeBetween(DateTime datetime, TimeSpan start, TimeSpan end)
{
// convert datetime to a TimeSpan
TimeSpan now = datetime.TimeOfDay;
// see if start comes before end
if (start < end)
return start <= now && now <= end;
// start is after end, so do the inverse comparison
return !(end < now && now < start);
}
bool silenceAlarm = TimeBetween(DateTime.Now, StartTime.Value, EndTime.Value);
if (StartTime > EndTime)
{
// the range crosses midnight, do the comparisons independently
return (StartTime < Now) || (Now < EndTime);
}
else
{
// the range is on the same day, both comparisons must be true
return StartTime < Now && Now < EndTime;
}
public static bool isCurrenctDateBetween(DateTime fromDate, DateTime toDate)
{
DateTime curent = DateTime.Now.Date;
if (fromDate.CompareTo(toDate) >= 1)
{
MessageBox.Show("From Date shouldn't be grater than To Date", "DateRange",MessageBoxButton.OKCancel, MessageBoxImage.Warning);
}
int cd_fd = curent.CompareTo(fromDate);
int cd_td = curent.CompareTo(toDate);
if (cd_fd == 0 || cd_td == 0)
{
return true;
}
if (cd_fd >= 1 && cd_td <= -1)
{
return true;
}
return false;
}
public static bool TimeBetween(DateTime time, DateTime startDateTime, DateTime endDateTime)
{
// get TimeSpan
TimeSpan start = new TimeSpan(startDateTime.Hour, startDateTime.Minute, 0);
TimeSpan end = new TimeSpan(endDateTime.Hour, endDateTime.Minute, 0);
// convert datetime to a TimeSpan
TimeSpan now = time.TimeOfDay;
// see if start comes before end
if (start < end)
return start <= now && now <= end;
// start is after end, so do the inverse comparison
return !(end < now && now < start);
}