当前位置:编程学习 > C#/ASP.NET >>

asp.net 时间段与时间段的计算?

我做的是考勤相关的系统;
在一天内有几个休息的时间段,如下图:
我给出某个人五天的出勤时间情况,如下:
第一天:8:30~17:00
第二天:12:30~17:00
第三天:13:00~21:00
第四天:8:30~23:00
第五天:8:30~21:30
问题是怎么算出每一天的勤务(每天的工作时间,休息时间要除去).
看看有没有好的解决方法
追问:行.我仔细的看了你写的代码,,,不错,比我想的要好的多,谢谢.分给你啦.
我也把我的不成熟的发上来...:
 /// <summary>
        /// 勤务时间
        /// </summary>
        /// <returns></returns>
        private string CalculationService(string time1, string time2)
        {
            if ("".Equals(time1) || "".Equals(time2))
            {
                return "0";
            }
            AURORADataSourceDataContext dc2 = new AURORADataSourceDataContext();
            List<AK_AttendanceRest> listRest = dc2.AK_AttendanceRest.OrderBy(s => s.startTime).ToList();//得到休息的时间段的集合.
            DateTime timeOne = Convert.ToDateTime(Convert.ToDateTime(time1).ToShortTimeString());
            DateTime timeTwo = Convert.ToDateTime(Convert.ToDateTime(time2).ToShortTimeString());
            double restTime = 0;
            //Bind("PurchaseDate", "{0:t}")
            foreach (AK_AttendanceRest item in listRest)
            {
                DateTime timeOne_1 = Convert.ToDateTime(Convert.ToDateTime(item.startTime).ToShortTimeString());
                DateTime timeTwo_2 = Convert.ToDateTime(Convert.ToDateTime(item.endTime).ToShortTimeString());
                if (timeOne < timeOne_1 && timeTwo < timeTwo_2 && timeTwo > timeOne)
                {
                    restTime += 0;
                }
                else if (timeOne < timeOne_1 && timeTwo > timeOne_1 && timeTwo < timeTwo_2)
                {
                    TimeSpan span = timeTwo - timeOne_1;
                    restTime += span.TotalHours;
                }
                else if (timeOne > timeOne_1 && timeOne < timeTwo_2 && timeTwo > timeTwo_2)
                {
                    TimeSpan span = timeTwo_2 - timeOne;
                    restTime += span.TotalHours;
                }
                else if (timeOne > timeTwo_2 && timeTwo > timeTwo_2)
                {
                    restTime += 0;
                }
                else if (timeOne < timeOne_1 && timeTwo > timeOne_1 && timeTwo > timeTwo_2)
                {
                    TimeSpan span = timeTwo_2 - timeOne_1;
                    restTime += span.TotalHours;
                }

            }

            TimeSpan span_Work = timeTwo - timeOne;

            return (span_Work.TotalHours - restTime).ToString();
        }
答案:protected void Page_Load(object sender, EventArgs e)
    {
       Response.Write("今天出勤时间为:"+GetTiem("8:30", "21:30"));
    }
    protected string GetTiem(string begin, string end)
    {
        string[] arrNap=new string[]{"12:00","13:00","18:00","19:00","21:00","22:00"};
        DateTime daysbegin =  Convert.ToDateTime(begin);
        DateTime daysend = Convert.ToDateTime(end);
        TimeSpan ts = daysend.Subtract(daysbegin);
        int hous = ts.Hours;
        int Minute = ts.Minutes;
        DateTime tembegin;
        DateTime temend;
        for(int i=0;i<arrNap.Length-1;i+=2)
        {
            tembegin=Convert.ToDateTime(arrNap[i]);
            temend = Convert.ToDateTime(arrNap[i + 1]);
            ts = temend.Subtract(tembegin);
            if (daysbegin < tembegin && daysend > temend)
            {
                hous -= ts.Hours;
                Minute -= ts.Minutes;
            }
            else if (daysend < temend && daysend > tembegin)
            {
                hous +=daysend.Subtract(temend).Hours;
                Minute -= 60 - temend.Subtract(daysend).Minutes;
                break;
            }
        }
        if (Minute < 0)
        {
            Minute = Minute*-1;
            hous += Minute / 60 <= 0 ? -1 : Minute / 60;
        }
        return hous+"小时"+Minute+"分钟";
    }
用一天的出勤时间减去休息时间和,语句应该简单吧

上一个:用asp.net(c#)语言
下一个:用asp.net如何实现以下功能

CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,