• 计算员工有效工作时间(C#版)


            /// <summary>
            /// 更具开始时间和结束时间获得有效的工作时间
            /// </summary>
            /// <param name="startime"></param>
            /// <param name="endtime"></param>
            /// <returns></returns>
            public static double GetWorkTime(string startime, string endtime)
            {
                if (startime == endtime)
                {
                    return 0;
                }
                //计算结束时间和开始时间之间的时间差
                DateTime start = Convert.ToDateTime(startime);
                //结束时间
                DateTime end = string.IsNullOrEmpty(endtime) ? DateTime.Now : Convert.ToDateTime(endtime);
                //设置开始时间的标准工作时间
                DateTime startWorkSTime = Convert.ToDateTime(start.ToString("yyyy-MM-dd") + " " + "09:00:00");
                DateTime startWorkETime = Convert.ToDateTime(start.ToString("yyyy-MM-dd") + " " + "17:00:00");
                //设置结束时间的标准工作时间
                DateTime endWorkSTime = Convert.ToDateTime(end.ToString("yyyy-MM-dd") + " " + "09:00:00");
                DateTime endWorkETime = Convert.ToDateTime(end.ToString("yyyy-MM-dd") + " " + "17:00:00");
    
                TimeSpan ts = end - start;
                int day = ts.Days;
                double minute = 0.0;
    
                if (day > 0)
                {
                    //当结束时间点钟比开始时间大天数减一
                    if (DateTime.Compare(Convert.ToDateTime(start.ToString("HH:mm:ss")), Convert.ToDateTime(end.ToString("HH:mm:ss").ToString())) <= 0)
                    {
                        day = day - 1;
                    }
                    DateTime xunhuan = start;
                    minute = day * 8 * 60;
                    for (int i = 0; i < day; i++)
                    {
                        if (xunhuan.AddDays(1).DayOfWeek.ToString() == "Saturday" || xunhuan.AddDays(1).DayOfWeek.ToString() == "Sunday")
                        {
                            minute = minute - 8 * 60;
                        }
                        xunhuan = xunhuan.AddDays(1);
                    }
    
                }
                //计算开始时间
                if (start.DayOfWeek.ToString() != "Saturday" && start.DayOfWeek.ToString() != "Sunday")
                {
                    //计算开始时间落在九点之前
                    if (DateTime.Compare(start, startWorkSTime) <= 0)
                    {
                        minute += 8 * 60;
                    }
                    //计算时间落在上午九点和下午5点之间
                    else if (DateTime.Compare(startWorkSTime, start) < 0 && DateTime.Compare(start, startWorkETime) <= 0)
                    {
                        minute += (startWorkETime - start).TotalMinutes;
                    }
                }
                //循环计算排除双休日
    
                if (end.DayOfWeek.ToString() != "Saturday" && end.DayOfWeek.ToString() != "Sunday")
                {
                    //结束时间在九点和下午5点之间
                    if (DateTime.Compare(endWorkSTime, end) < 0 && DateTime.Compare(end, endWorkETime) <= 0)
                    {
                        minute += (end - endWorkSTime).TotalMinutes;
                    }
                    //结束时间在5点以后
                    else if (DateTime.Compare(endWorkETime, end) <= 0)
                    {
                        minute += 8 * 60;
                    }
                }
                if (day == 0)
                {
                    //不在同一天跨度时间不一致
                    //|| ((start.ToString("yyyy-MM-dd") == end.ToString("yyyy-MM-dd")) && (DateTime.Compare(startWorkSTime, start) <= 0&& DateTime.Compare(start, startWorkETime) <= 0 && DateTime.Compare(start, end) <= 0&& DateTime.Compare(end, startWorkETime) < 0)))
                    if (!(((start.ToString("yyyy-MM-dd") != end.ToString("yyyy-MM-dd")) && ((DateTime.Compare(startWorkSTime, start) <= 0 && DateTime.Compare(start, startWorkETime) <= 0) && (DateTime.Compare(endWorkSTime, end) <= 0 && DateTime.Compare(end, endWorkETime) <= 0)))))
                    {
                        minute = (minute - 8 * 60) > 0 ? (minute - 8 * 60) : 0;
                    }
                }
                return Math.Round(minute / 60, 1);
            }

    思路:设置标准时间,比如,周末时间置为周五下午17:00或者周一9:00,每天时间在有效时间外的置为17:00或9:00

  • 相关阅读:
    Python基础篇【第十一篇】:正则表达式之计算器
    Python基础篇【第十篇】:正则表达式
    Python基础篇【第九篇】:剖析装饰器
    Python基础篇【第八篇】:剖析递归函数
    Python基础篇【第七篇】:文件操作
    Python基础篇【第六篇】:函数补充
    Python基础篇【第五篇】:sed和函数
    TCP/IP详解之:Ping程序、Traceroute程序
    TCP/IP详解之:ICMP协议
    TCP/IP详解之:ARP协议 和 RARP协议
  • 原文地址:https://www.cnblogs.com/xue632777974/p/2933937.html
Copyright © 2020-2023  润新知