解决hh:mm形式时间的比较问题

呵呵,这里的时间其实就是DateTime的实例,但因为DateTime标识的时间是从年月日一直到毫秒。如果单纯地用DateTime.Compare(DateTime dt1, DateTime dt2)来比较那是会将年月日什么的都包含进去的,让人很不爽。上网查询看到有网友说可以用DateDiff函数,但我在类浏览器里看了半天都没找到这个函数。因为我只想让比较停留在 hh:mm 阶段,所以估计拿来就能用的方法要找起来也蛮头大的,干脆自己写得了
        public bool CheckTime()
       {
           string strCheckTime;        //用字符串来自定义时间,hh:mm形式的
           DateTime dtPara1 = Convert.ToDateTime(strCheckTime);
           DateTime dtPara2 = Convert.ToDateTime("10:30");
           int intCompare = DateTime.Compare(dtPara1, dtPara2);
           if (intCompare >= 0)
          {
               return true;
           }
           else
          {
               return false;
           }                                    //因为自己只要用二选一的,所以就定义了 bool 型
      }
呵呵,其实是个非常简单的函数,最主要的还是利用了 DateTime.Compare(DateTime dt1, DateTime dt2) 这个函数。不过至少也说明了自己也还是蛮靠得住的
好的,我可以帮你解决这个问题。以下是Java代码示例: ``` import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import java.util.List; public class WorkTimeCalculator { public static void main(String[] args) { String workTimeStr = "08:00-09:00;10:00-11:00"; String workedTimeStr = "08:17-08:20;10:01-10:19"; List<String> unworkedTimeList = getUnworkedTimeList(workTimeStr, workedTimeStr); System.out.println(String.join(";", unworkedTimeList)); } public static List<String> getUnworkedTimeList(String workTimeStr, String workedTimeStr) { List<String> unworkedTimeList = new ArrayList<>(); SimpleDateFormat sdf = new SimpleDateFormat("HH:mm"); try { // 解析工作时间段字符串 String[] workTimeArray = workTimeStr.split(";"); List<Date[]> workTimeRanges = new ArrayList<>(); for (String workTime : workTimeArray) { String[] timeRange = workTime.split("-"); Date start = sdf.parse(timeRange[0]); Date end = sdf.parse(timeRange[1]); workTimeRanges.add(new Date[]{start, end}); } // 解析已工作时间段字符串 String[] workedTimeArray = workedTimeStr.split(";"); List<Date[]> workedTimeRanges = new ArrayList<>(); for (String workedTime : workedTimeArray) { String[] timeRange = workedTime.split("-"); Date start = sdf.parse(timeRange[0]); Date end = sdf.parse(timeRange[1]); workedTimeRanges.add(new Date[]{start, end}); } // 计算未工作的时间段 for (Date[] workTimeRange : workTimeRanges) { Date workStartTime = workTimeRange[0]; Date workEndTime = workTimeRange[1]; for (Date[] workedTimeRange : workedTimeRanges) { Date workedStartTime = workedTimeRange[0]; Date workedEndTime = workedTimeRange[1]; if (workStartTime.before(workedStartTime) && workEndTime.after(workedStartTime)) { // 已工作时间段在工作时间段的起始部分 unworkedTimeList.add(sdf.format(workStartTime) + "-" + sdf.format(workedStartTime)); workStartTime = workedEndTime; } else if (workStartTime.after(workedEndTime) || workEndTime.before(workedStartTime)) { // 已工作时间段在工作时间段的结束部分或未重叠 continue; } else { // 已工作时间段在工作时间段的中间部分 workStartTime = workedEndTime; } } if (workStartTime.before(workEndTime)) { // 添加工作时间段剩余部分 unworkedTimeList.add(sdf.format(workStartTime) + "-" + sdf.format(workEndTime)); } } } catch (ParseException e) { e.printStackTrace(); } return unworkedTimeList; } } ``` 这个程序可以计算出未工作的时间段,并将其以字符串形式返回。你可以将工作时间段和已工作时间段的字符串传入 `getUnworkedTimeList()` 方法,它会返回未工作的时间段列表。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值