C# 跳过值班时间代码逻辑

c#,值班,时间,代码,逻辑 · 浏览次数 : 5

小编点评

```csharp /// /// 当前时间是否是值班时间 /// private bool IsDutyTime { get { // 定义值班时间格式 var dutyTime = "23:00-07:00"; // 检查值班时间格式是否正确 if (!string.IsNullOrEmpty(dutyTime)) { // 解析值班时间格式 var sp = dutyTime.Split('-'); // 检查时间段是否符合要求 if (sp.Length == 0) { var msg = $"值班时间格式有误:{dutyTime},正确格式为(17:30-09:00)"; logger.Error(msg); return false; } // 设置开始和结束时间 var hStart = 0; var mStart = 0; var hEnd = 0; var mEnd = 0; // 解析开始和结束时间 if (spStart.Length == 1) { hStart = Convert.ToInt32(spStart[0]); mStart = Convert.ToInt32(spStart[1]); } else if (spEnd.Length == 1) { hEnd = Convert.ToInt32(spEnd[0]); mEnd = Convert.ToInt32(spEnd[1]); } // 检查开始时间比结束时间早则属于值班时间 if (hStart > hEnd) { return true; } else if (hStart == hEnd && mStart > mEnd) { return true; } else if (hStart <= hEnd && mStart <= mEnd) { return true; } } return false; } } ```

正文

/// <summary>
/// 当前时间是否是值班时间
/// </summary>
private bool IsDutyTime
{
    get
    {
        var dutyTime = "23:00-07:00";
        if (!string.IsNullOrEmpty(dutyTime))
        {
            var now = DateTime.Now;
            var sp = dutyTime.Split('-');
            if (sp.Length == 0)
            {
                var msg = $"值班时间格式有误:{dutyTime},正确格式为(17:30-09:00)"; 
                logger.Error(msg);
                return false;
            }
            #region 跳过设置时间段

            var hStart = 0;
            var mStart = 0;
            var hEnd = 0;
            var mEnd = 0;

            //23:00-07:00
            var spStart = sp[0].Split(':');
            if (spStart.Length > 1)
            {
                hStart = Convert.ToInt32(spStart[0]);
                mStart = Convert.ToInt32(spStart[1]);
            }
            else
            {
                var msg = $"值班时间格式有误:{dutyTime},正确格式为(17:30-09:00)"; 
                logger.Error(msg);
                return false;

            }
            var spEnd = sp[1].Split(':');
            if (spEnd.Length > 1)
            {
                hEnd = Convert.ToInt32(spEnd[0]);
                mEnd = Convert.ToInt32(spEnd[1]);
            }
            else
            {
                var msg = $"值班时间格式有误:{dutyTime},正确格式为(17:30-09:00)"; 
                logger.Error(msg);
                return false;
            }

            if (hStart > hEnd)
            {
                //23:00-07:00  or  
                logger.Info($"设置时间段 dutyTime =>{dutyTime} 【now.Hour > hStart || (now.Hour == hStart && now.Minute >= mStart) || now.Hour < hEnd || (now.Hour == hEnd && now.Minute <= mEnd)】 =>" +
                            $" 【{now.Hour} > {hStart} || ({now.Hour} == {hStart} && {now.Minute} >= {mStart}) || {now.Hour} < {hEnd} || ({now.Hour} == {hEnd} && {now.Minute} <= {mEnd})】");
                if (now.Hour > hStart || (now.Hour == hStart && now.Minute >= mStart) || now.Hour < hEnd || (now.Hour == hEnd && now.Minute <= mEnd))
                {
                    logger.Info($"当前时间段,属于值班时间 =>{dutyTime}");
                    return true;
                }
            }
            else
            {
                //07:00-23:00 and
                logger.Info($"设置时间段 dutyTime =>{dutyTime} 【now.Hour >= hStart && now.Minute >= mStart && now.Hour <= hEnd && now.Minute <= mEnd】 => " +
                            $"【{now.Hour} >= {hStart} && {now.Minute} >= {mStart} && {now.Hour} <= {hEnd} && {now.Minute} <= {mEnd}】");
                if ((now.Hour >= hStart && now.Minute >= mStart) && (now.Hour <= hEnd && now.Minute <= mEnd))
                {
                    logger.Info($"当前时间段,属于值班时间 =>{dutyTime}");
                    return true;
                }
            }
            #endregion

        }

        return false;
    }
}

与C# 跳过值班时间代码逻辑相似的内容:

C# 跳过值班时间代码逻辑

/// /// 当前时间是否是值班时间 /// private bool IsDutyTime { get { var dutyTime = "23:00-07:00"; if (!string.IsNullOrEmpty(dutyTime)) { var

C# 开发技巧 轻松监控方法执行耗时

前言 MethodTimer.Fody 是一个功能强大的库,可以用于测量 .NET 应用程序中的方法的执行时间。允许你在不修改代码的情况下,自动地测量和记录方法的执行时间。 这个工具是基于.NET的 weaving 技术,通过修改IL(Intermediate Language,中间语言)代码来插入

C#开源、简单易用的Dapper扩展类库 - Dommel

前言 今天大姚给大家分享一个C#开源(MIT License)、免费、简单易用的Dapper扩展类库,帮助.NET开发者使用Dapper的CRUD操作变得更简单:Dommel。 项目特性 Dommel 使用 IDbConnection 接口上的扩展方法为 CRUD 操作提供了便捷的 API。 Dom

C语言指针易混淆知识点总结

指针 定义 指针是一个变量,存储另一个变量的内存地址,它允许直接访问和操作内存中的数据,使得程序能够以更灵活和高效的方式处理数据和内存。 获取变量地址:使用取地址符 &。 访问地址上的数据:使用解引用符 *。 例子1 指针是存储另一个变量地址的变量。通过使用取地址符 & 和解引用符 *,我们可以灵活

C++如何在main函数开始之前(或结束之后)执行一段逻辑?

1. 问题 2. 考察的要点 3. 解决策略 3.1. 方案一:使用GCC的拓展功能 3.2. 方案二:使用全局变量 3.3. 方案三:atexit 4. Demo测试 4.1. 测试代码 4.2. 执行结果 5. 程序异常退出场景 5.1. 存在的问题 5.2. 解决方案 5.2.1. 原理 5.

C#/.NET这些实用的编程技巧你都会了吗?

DotNet Exercises介绍 DotNetGuide专栏C#/.NET/.NET Core编程常用语法、算法、技巧、中间件、类库练习集,配套详细的文章教程讲解,助你快速掌握C#/.NET/.NET Core各种编程常用语法、算法、技巧、中间件、类库等等。 GitHub开源地址:https:/

C# 使用模式匹配的好处,因为好用所以推荐~

类型检查和转换:当你需要检查对象是否为特定类型,并且希望在同一时间内将其转换为那个类型时,模式匹配提供了一种更简洁的方式来完成这一任务,避免了使用传统的as和is操作符后还需要进行额外的null检查。 复杂条件逻辑:在处理复杂的条件逻辑时,特别是涉及到多个条件和类型的情况下,使用模式匹配可以使代码更

【C++】使用ort推理yolov10

【C++】使用ort推理yolov10 前言:由于笔者是编导专业,想玩玩yolo模型,搜来搜去全是python,所以在学会之后写一篇文章帮助和笔者同样情况的人 环境 Windows 10 C++17 onnxruntime18.1(DML版本) opencv4.9 visual studio2022

C++使用gnuplot-cpp库绘制图像

最近想要对一些时变的变量进行可视化,搜索来搜索去选择了使用gnuplot这个工具。 sudo apt-get install gnuplot sudo apt-get install gnuplot-x11 # 使其支持linux终端 这样就安装完gnuplot了。接着可以在命令行中键入gnuplo

C++11标准库梳理

shared_future、async、packaged_task、promise、future、atomic、CAS、condition_variable、condition_variable_any、unique_lock、recursive_timed_mutex、this_thread、ha...