Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/276.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何检查DateTime.Now是否仅在时间部分的两个给定日期时间之间?_C# - Fatal编程技术网

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);
    }