• java 获取时间区间


    package com.javaCode.package05;
    import java.text.*;
    import java.util.*;
    public class Sd123 {
    static SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    public static void main(String[] args) throws Exception {
    MyDate m = new MyDate();
    m.setStartDate("2012-12-29 08:00:00");
    m.setEndDate("2012-12-29 20:59:59");
    MyDate m1 = new MyDate();
    m1.setStartDate("2012-12-29 09:00:00");
    m1.setEndDate("2012-12-29 10:30:00 ");
    MyDate m2 = new MyDate();
    m2.setStartDate("2012-12-29 15:00:00");
    m2.setEndDate("2012-12-29 17:00:00");
    List<MyDate> list = new ArrayList<MyDate>();
    list.add(m1);
    list.add(m2);
    List<MyDate> result = getFreeTime(m, list);
    for (MyDate d : result) {
    System.out.println(d.getStartDate().toString() + " ~ " + d.getEndDate().toString());
    }
    System.exit(0);
    }
    private static List<MyDate> getFreeTime(MyDate m, List<MyDate> busy)
    throws Exception {
    // m 得到时间  busy 得到list 的值
    long start = sdf.parse(m.getStartDate()).getTime() / 1000L;
    long end = sdf.parse(m.getEndDate()).getTime() / 1000L;
    // 取得start---end之间的所以值 赋值给all
    Set<Long> all = new TreeSet<Long>();
    for (long i = start; i <= end; i++) {
    all.add(i);
    }
    // 取得 busy 中 list 里的值  这里使用set进行去重
    Set<Long> busySet = new TreeSet<Long>();
    for (MyDate my : busy) {
    long s = sdf.parse(my.getStartDate()).getTime() / 1000L;
    long e = sdf.parse(my.getEndDate()).getTime() / 1000L;
    for (long i = s; i <= e; i++) {
    busySet.add(i);
    }
    }
    /*
    *  移除 set 中那些包含在指定 collection 中的元素(可选操作)。
    *  例如:set1.removeAll(set2)
    *   可以删除set1里面和set2重复的所有参数
    *  如果你需要一个合集,可以简单那的
    *   set1.addAll(set2); 这样set1里面就是所有的参数了。
    */
    all.removeAll(busySet);
    // free = all 赋值
    List<Long> free = new ArrayList<Long>(all);
    List<MyDate> result = new ArrayList<MyDate>();
    MyDate mm = new MyDate();
    for (int i = 0; i < free.size(); i++) {
    // 获取free中的 值
    long c = free.get(i);
    if (i == 0) {
    mm.setStartDate(sdf.format(new Date(c * 1000)));
    }
    if (i == free.size() - 1) {
    mm.setEndDate(sdf.format(new Date(c * 1000)));
    result.add(mm);
    break;
    }
    long n = free.get(i + 1);
    if (n > c + 1) {
    mm.setEndDate(sdf.format(new Date(c * 1000)));
    result.add(mm);
    mm = new MyDate();
    mm.setStartDate(sdf.format(new Date(n * 1000)));
    }
    }
    return result;
    }
    }
    class MyDate {
    String startDate;
    String endDate;
    public String getEndDate() {
    return endDate;
    }
    public void setEndDate(String endDate) {
    this.endDate = endDate;
    }
    public String getStartDate() {
    return startDate;
    }
    public void setStartDate(String startDate) {
    this.startDate = startDate;
    }
    }
  • 相关阅读:
    JAVA设计模式之桥接模式
    Pycharm新建模板默认添加作者时间等信息
    Handler机制(2)转载
    内部类学习
    设计模式-1依赖倒置原则示例
    正则表达式
    Service原理及例子
    Serializable接口
    设计模式之静态工厂模式
    Handler机制post方法使用
  • 原文地址:https://www.cnblogs.com/love-you-girl/p/3967876.html
Copyright © 2020-2023  润新知