/// <summary> /// 出勤模式换算成时间 /// </summary> /// <param name="mode">8:00-12:00;13:00-17:00</param> /// <returns></returns> public static List <APSAttendanceSlot> AttendanceModeTransformTime(string mode) { List <APSAttendanceSlot> itemList = new List <APSAttendanceSlot>(); string[] lines = mode.Split(SplitHelper.SplitSemicolon); string[] TimeSlots; foreach (string line in lines) { if (!string.IsNullOrWhiteSpace(line)) { TimeSlots = line.Split(SplitHelper.SplitHyphen);//8:00 12:00 if (TimeSlots != null) { APSAttendanceSlot item = new APSAttendanceSlot(); //TimeSlots 中索引含义 0-小时 1-分钟 //开始时刻 TimeSlots[0]代表8:00 if (!string.IsNullOrWhiteSpace(TimeSlots[0])) { string[] slot = TimeSlots[0].Split(SplitHelper.SplitColon);//8 00 APSAttendanceTime start = new APSAttendanceTime(); start.hour = int.Parse(slot[0]); start.minute = int.Parse(slot[1]); item.startSlot = start; } //结束时刻 TimeSlots[1]代表 12:00 if (!string.IsNullOrWhiteSpace(TimeSlots[1])) { string[] slot = TimeSlots[1].Split(SplitHelper.SplitColon);//12 00 APSAttendanceTime end = new APSAttendanceTime(); end.hour = int.Parse(slot[0]); end.minute = int.Parse(slot[1]); item.endSlot = end; item.SlotSeconds = TimeSlotDiff(item.startSlot, item.endSlot); } itemList.Add(item); } } } return(itemList); }
/// <summary> /// 计算两个时刻之间的时间差 返回值单位:秒 /// </summary> /// <param name="start"></param> /// <param name="end"></param> /// <returns></returns> public static int TimeSlotDiff(APSAttendanceTime start, APSAttendanceTime end) { int totalSecond = 0; int dayHours = 24;//一天24小时 if (end.hour == 0) { end.hour = dayHours; } //8:00-12:00;13:00-17:00情况 不跨天 if (start.hour <= end.hour) { totalSecond = (end.hour - start.hour) * 3600 + (end.minute - start.minute) * 60;//单位秒 } //20:00-8:00 if (start.hour > end.hour) { totalSecond = (end.hour + dayHours + -start.hour) * 3600 + (end.minute - start.minute) * 60;//单位秒 } return(totalSecond); }