You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

给定起止时间,如何判断当前时间是否有效?及该方法的C#实现

时间范围判断方法及C#实现

问题1:如何判断当前时间是否处于指定时间范围内?

  • 第一步:将字符串格式的开始时间(StartTime)和结束时间(EndTime)转换为时间对象,仅保留时分秒等时间部分,忽略日期
  • 第二步:提取当前时间的时间部分,同样忽略日期
  • 第三步:比较当前时间的时间部分是否大于等于开始时间、小于等于结束时间
  • 特殊场景处理:如果存在跨天情况,比如开始时间为22:00、结束时间为06:00,判断逻辑需调整为:当前时间要么大于等于开始时间,要么小于等于结束时间

问题2:C#中实现该判断方法

核心思路

  1. 使用DateTime.TryParseExact安全解析12小时制时间字符串,指定格式为hh:mm tt,避免格式错误引发异常
  2. 提取解析后时间的TimeOfDay属性,获取当天的时间跨度,忽略日期干扰
  3. 提取当前时间的TimeOfDay,进行范围比较
  4. 处理解析失败的情况,直接返回false,也可根据需求抛出异常

完整代码实现

string StartTime = "06:10 PM";
string Endtime = "08:10 PM";
DateTime current_time = DateTime.Now;

bool validTime = validTimeFindout(StartTime, Endtime, current_time);

bool validTimeFindout(string startTimeStr, string endTimeStr, DateTime currentTime)
{
    // 定义12小时制时间格式
    string timeFormat = "hh:mm tt";
    // 解析开始时间与结束时间
    if (!DateTime.TryParseExact(startTimeStr, timeFormat, null, System.Globalization.DateTimeStyles.None, out DateTime startTime) ||
        !DateTime.TryParseExact(endTimeStr, timeFormat, null, System.Globalization.DateTimeStyles.None, out DateTime endTime))
    {
        // 格式解析失败时返回false
        return false;
    }

    // 提取纯时间部分
    TimeSpan start = startTime.TimeOfDay;
    TimeSpan end = endTime.TimeOfDay;
    TimeSpan current = currentTime.TimeOfDay;

    // 非跨天场景判断
    if (start <= end)
    {
        return current >= start && current <= end;
    }
    // 跨天场景判断
    else
    {
        return current >= start || current <= end;
    }
}

代码说明

  • DateTime.TryParseExact:指定精确格式解析,避免因系统区域设置差异导致的解析错误,比DateTime.Parse更安全
  • TimeOfDay:获取DateTime对应的当天时间跨度,实现仅比较时间部分的需求
  • 兼容跨天场景,提升方法的适用性

内容的提问来源于stack exchange,提问作者Nakib

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 17:46:02