[Java] int转化为String时间格式 “hh:mm“

// Returns a string representation of this clock, using the format HH:MM.
public String toString()
{
    return String.format("%02d:%02d", hour, minute);
}
  • output:
01:02
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,这个问题其实是需要一个比较复杂的算法来解决的。我会尽力帮你解答。 首先,我们需要将传入设备的日常工作时间段和还未工作的空闲时间段都转化为时间戳,方便后续的计算。然后,我们需要将传入的工作时间转化为分钟数。接着,我们需要遍历这个设备的空闲时间段,以及其它非休息时间段,来寻找是否存在满足工序的工作时间需要的连续工作时间段。 具体实现时,我们可以先将所有的工作时间段按照开始时间排序,然后遍历每个工作时间段,判断其是否可以和前一个工作时间段合并为一个连续的工作时间段。如果可以,就将它们合并,否则就将前一个工作时间段加入结果数组中,并将当前工作时间段作为下一个工作时间段的前一个时间段。最后,我们再遍历所有的非休息时间段,判断是否存在满足工序的工作时间需要的连续工作时间段。如果存在,就返回true,并返回满足的这个工作时段的开始时间HH:mm;否则返回false。 需要注意的是,这个算法中有很多细节需要考虑,比如时间格式换、时间段的判断等。我可以提供一份Java代码供你参考,但是需要你自己根据实际情况进行调整和修改。以下是代码示例: ```java import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Calendar; import java.util.Collections; import java.util.Date; import java.util.List; public class DeviceSchedule { // 将时间字符串换为时间戳 public static long getTimeStamp(String timeStr) throws ParseException { SimpleDateFormat sdf = new SimpleDateFormat("HH:mm"); Date date = sdf.parse(timeStr); return date.getTime(); } // 将时间戳换为时间字符串 public static String getTimeStr(long timeStamp) { SimpleDateFormat sdf = new SimpleDateFormat("HH:mm"); Date date = new Date(timeStamp); return sdf.format(date); } // 将时间段字符串换为时间戳列表 public static List<Long[]> getTimeRanges(String timeRangeStr) throws ParseException { List<Long[]> timeRanges = new ArrayList<>(); String[] timeStrs = timeRangeStr.split(";"); for (String timeStr : timeStrs) { String[] timeArr = timeStr.split("-"); Long[] timeRange = new Long[2]; timeRange[0] = getTimeStamp(timeArr[0]); timeRange[1] = getTimeStamp(timeArr[1]); timeRanges.add(timeRange); } return timeRanges; } // 将分钟数换为时间字符串 public static String getDurationTime(int duration) { int hour = duration / 60; int minute = duration % 60; return String.format("%02d:%02d", hour, minute); } // 将时间字符串换为分钟数 public static int getTimeDuration(String timeStr) throws ParseException { SimpleDateFormat sdf = new SimpleDateFormat("HH:mm"); Date date = sdf.parse(timeStr); Calendar calendar = Calendar.getInstance(); calendar.setTime(date); int hour = calendar.get(Calendar.HOUR_OF_DAY); int minute = calendar.get(Calendar.MINUTE); return hour * 60 + minute; } // 判断两个时间段是否有重叠 public static boolean isOverlap(Long[] timeRange1, Long[] timeRange2) { return timeRange1[0] < timeRange2[1] && timeRange1[1] > timeRange2[0]; } // 求两个时间段的交集 public static Long[] getIntersection(Long[] timeRange1, Long[] timeRange2) { Long[] intersection = new Long[2]; intersection[0] = Math.max(timeRange1[0], timeRange2[0]); intersection[1] = Math.min(timeRange1[1], timeRange2[1]); return intersection[0] < intersection[1] ? intersection : null; } // 合并两个时间段 public static Long[] mergeTimeRanges(Long[] timeRange1, Long[] timeRange2) { Long[] merge = new Long[2]; merge[0] = Math.min(timeRange1[0], timeRange2[0]); merge[1] = Math.max(timeRange1[1], timeRange2[1]); return merge; } // 按照开始时间排序工作时间段 public static void sortTimeRanges(List<Long[]> timeRanges) { Collections.sort(timeRanges, (a, b) -> a[0].compareTo(b[0])); } // 判断是否满足工序的工作时间需要 public static boolean isAvailable(List<Long[]> workTimeRanges, List<Long[]> freeTimeRanges, int duration) throws ParseException { // 合并工作时间段 sortTimeRanges(workTimeRanges); List<Long[]> mergedWorkTimeRanges = new ArrayList<>(); Long[] prevTimeRange = null; for (Long[] timeRange : workTimeRanges) { if (prevTimeRange == null || !isOverlap(prevTimeRange, timeRange)) { if (prevTimeRange != null) { mergedWorkTimeRanges.add(prevTimeRange); } prevTimeRange = timeRange; } else { prevTimeRange = mergeTimeRanges(prevTimeRange, timeRange); } } if (prevTimeRange != null) { mergedWorkTimeRanges.add(prevTimeRange); } // 找到满足工序的工作时间段 for (Long[] freeTimeRange : freeTimeRanges) { Long[] availableTimeRange = freeTimeRange; for (Long[] workTimeRange : mergedWorkTimeRanges) { if (isOverlap(availableTimeRange, workTimeRange)) { availableTimeRange = getIntersection(availableTimeRange, workTimeRange); if (availableTimeRange == null) { break; } } else { availableTimeRange = freeTimeRange; } } if (availableTimeRange != null) { int availableDuration = (int) ((availableTimeRange[1] - availableTimeRange[0]) / (1000 * 60)); if (availableDuration >= duration) { String startTime = getTimeStr(availableTimeRange[0]); System.out.println("满足工序的工作时间段为:" + startTime + "-" + getDurationTime(duration)); return true; } } } return false; } public static void main(String[] args) throws ParseException { String workTimeStr = "08:00-12:00;13:00-17:00"; String freeTimeStr = "00:00-08:00;12:00-13:00;17:00-24:00"; String durationStr = "120"; List<Long[]> workTimeRanges = getTimeRanges(workTimeStr); List<Long[]> freeTimeRanges = getTimeRanges(freeTimeStr); int duration = getTimeDuration(durationStr); boolean isAvailable = isAvailable(workTimeRanges, freeTimeRanges, duration); System.out.println("是否满足工序的工作时间需要:" + isAvailable); } } ``` 这份代码可以根据传入的设备的日常工作时间段、某工序需要的工作时间和设备还未工作的空闲时间段,来判断是否存在满足工序的工作时间需要的连续工作时间段,并返回满足的这个工作时段的开始时间。你可以根据自己的实际情况进行调整和修改。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值