对日期处理相关工具类

日期相关处理工具

1.获取当前日期字符串

如:2019-10-12

    public static String getCurrentDateStr() {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        Date d = new Date();
        String nowStr = sdf.format(d);
        return nowStr;
    }

2.获取从今天算起的30天内的日期集合

如:2019-10-12、2019-10-13、2019-10-14、...2019-11-11

    public static List getDateInfoList() {
        SimpleDateFormat YEAR = new SimpleDateFormat("yyyy-MM-dd");
        ArrayList dateInfos = new ArrayList<>();
        Calendar calendar = Calendar.getInstance();
         String year = YEAR.format(calendar.getTime());

        for (int i = 0; i < column; i++) {
            String year = YEAR.format(calendar.getTime());
            dateInfos.add(year);
            calendar.add(Calendar.DAY_OF_MONTH, 1);
        }
        return dateInfos;
    }

3.获取从前一天算起的30天内的日期集合

如:2019-10-11、2019-10-12、2019-10-13、2019-10-14、...2019-11-11 以此类推可向前推可向后加

     public static List getDateInfoList() {
        ArrayList dateInfos = new ArrayList<>();
        Calendar calendar = Calendar.getInstance();
        calendar.set(Calendar.DATE, calendar.get(Calendar.DATE) - 1);

        for (int i = 0; i < column; i++) {
            String year = YEAR.format(calendar.getTime());
            dateInfos.add(year);
            calendar.add(Calendar.DAY_OF_MONTH, 1);
        }
        return dateInfos;
    }

4.判断某一个时间是否在一个时间段内

如:10:00 是否在10:00-20:00这个时间段范围内

 /**
     * 判断某一时间是否在一个区间内
     *
     * @param sourceTime 时间区间,半闭合,如[10:00-20:00)
     * @param curTime    需要判断的时间 如10:00
     * @return
     * @throws IllegalArgumentException
     */
    public static boolean isInTime(String sourceTime, String curTime) {
        if (sourceTime == null || !sourceTime.contains("-") || !sourceTime.contains(":")) {
            throw new IllegalArgumentException("Illegal Argument arg:" + sourceTime);
        }
        if (curTime == null || !curTime.contains(":")) {
            throw new IllegalArgumentException("Illegal Argument arg:" + curTime);
        }
        String[] args = sourceTime.split("-");
        SimpleDateFormat sdf = new SimpleDateFormat("HH:mm");
        try {
            long now = sdf.parse(curTime).getTime();
            long start = sdf.parse(args[0]).getTime();
            long end = sdf.parse(args[1]).getTime();
            if (args[1].equals("00:00")) {
                args[1] = "24:00";
            }
            if (end < start) {
                if (now >= end && now < start) {
                    return false;
                } else {
                    return true;
                }
            } else {
                if (now >= start && now < end) {
                    return true;
                } else {
                    return false;
                }
            }
        } catch (ParseException e) {
            e.printStackTrace();
            throw new IllegalArgumentException("Illegal Argument arg:" + sourceTime);
        }
    }

5.将某一个时间往后增加一天

如:今天2019-10-12,返回2019-10-13时间字符串

    public static String getAfterDate(String dateGiven) throws Exception {
        Date date = formatter.parse(dateGiven);
        Calendar calendar = new GregorianCalendar();
        calendar.setTime(date);
        calendar.add(calendar.DATE, -1);//把日期往后增加一天.整数往后推,负数往前移动
        date = calendar.getTime(); //这个时间就是日期往后推一天的结果 
        String dateString = formatter.format(date);
        return dateString;
    }

6.日期字符串转为毫秒值

如:2019-10-12返回456478964

    public static long dateToTimestamp(String time) {
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        try {
            Date date = simpleDateFormat.parse(time);
            long ts = date.getTime() / 1000;
            return ts;
        } catch (ParseException e) {
            return 0;
        }
    }

7.毫秒值转日期

如:456478964返回2019-10-12

 public static String timestampToDate(long time) {
        if (time < 10000000000L) {
            time = time * 1000;
        }
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        String sd = sdf.format(new Date(Long.parseLong(String.valueOf(time))));
        return sd;
    }

8.传入两个时间字符串得到时间字符串集合

如:传入2019-10-12,2019-10-16
返回:2019-10-12、2019-10-13、2019-10-14、2019-10-15、2019-10-16

    public static List addDates(String cntDateBeg, String cntDateEnd) {
        List list = new ArrayList<>();
        //拆分成数组
        String[] dateBegs = cntDateBeg.split("-");
        String[] dateEnds = cntDateEnd.split("-");
        //开始时间转换成时间戳
        Calendar start = Calendar.getInstance();
        start.set(Integer.valueOf(dateBegs[0]), Integer.valueOf(dateBegs[1]) - 1, Integer.valueOf(dateBegs[2]));
        Long startTIme = start.getTimeInMillis();
        //结束时间转换成时间戳
        Calendar end = Calendar.getInstance();
        end.set(Integer.valueOf(dateEnds[0]), Integer.valueOf(dateEnds[1]) - 1, Integer.valueOf(dateEnds[2]));
        Long endTime = end.getTimeInMillis();
        //定义一个一天的时间戳时长
        Long oneDay = 1000 * 60 * 60 * 24l;
        Long time = startTIme;
        //循环得出
        while (time <= endTime) {
            list.add(new SimpleDateFormat("yyyy-MM-dd").format(new Date(time)));
            time += oneDay;
        }
        return list;
    }

9.比较日期字符串大小,按日期大小顺序排列

如:传参2019-10-12、2019-10-11,、2019-10-15集合
返回:2019-10-11、2019-10-12、2019-10-15

    private List compareDates(List datelists) {
        Collections.sort(datelists, new Comparator() {
            @Override
            public int compare(String h1, String h2) {
                return h1.compareTo(h2);
            }
        });
        return datelists;
    }

10. 判断某一个日期是否大于当前日期

例如:比较两个日期大小2019-7-20 12:12:12 和2019-7-20 10:10:10大小

   /**
     * @param dateStr 结果返回是1 预订入住日期大于当前日期
     * @return
     */
    public static int compareDate(String dateStr) {
        Date currentTime = new Date();
//改变输出格式(自己想要的格式)
        DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
//得到字符串时间
        String s8 = df.format(currentTime);
        try {
            Date dt1 = df.parse(dateStr);
            Date dt2 = df.parse(s8);
            if (dt1.getTime() > dt2.getTime()) {
                System.out.println("dt1 在dt2前");
                System.out.println("dt1在dt2后");
                return 1;
            }

        } catch (Exception exception) {
            exception.printStackTrace();
        }
        return 0;


    }

注意事项

在格式化时间字符串时候
 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");中如果"yyyy-MM-dd"替换成"YYYY-MM-dd"在android5.0的部分机型会报错

你可能感兴趣的:(对日期处理相关工具类)