DateUtil各类时间转换梳理持续更新

时间戳与日期格式字符串的互转

 /** 
     * 时间戳转换成日期格式字符串 
     * @param seconds 精确到秒的字符串 
     * @param formatStr 
     * @return 
     */  
    public static String timeStamp2Date(String seconds,String format) {  
        if(seconds == null || seconds.isEmpty() || seconds.equals("null")){  
            return "";  
        }  
        if(format == null || format.isEmpty()){
            format = "yyyy-MM-dd HH:mm:ss";
        }   
        SimpleDateFormat sdf = new SimpleDateFormat(format);  
        return sdf.format(new Date(Long.valueOf(seconds+"000")));  
    }  
    /** 
     * 日期格式字符串转换成时间戳 
     * @param date 字符串日期 
     * @param format 如:yyyy-MM-dd HH:mm:ss 
     * @return 
     */  
    public static String date2TimeStamp(String date_str,String format){  
        try {  
            SimpleDateFormat sdf = new SimpleDateFormat(format);  
            return String.valueOf(sdf.parse(date_str).getTime()/1000);  
        } catch (Exception e) {  
            e.printStackTrace();  
        }  
        return "";  
    }  

取得当前时间戳(精确到秒)

public static String timeStamp(){  
    long time = System.currentTimeMillis();
    String t = String.valueOf(time/1000);  
    return t;  
}  

取得当前日期

//pattern范围yyyy-MM-dd'T'HH:mm:ss.SSS Z
public static String getNowDate(String datePattern){
        Date date = new Date();
        SimpleDateFormat sdf = new SimpleDateFormat(datePattern);
        return sdf.format(date);
    }

取得n天开始,结束的时间

/* N天开始时间
     * 1 == 昨天
     * 2 == 前天
     * 3 == 以此类推
     */
    public static long getNumberOfDaysStartUnixTime(int numberOfDays ) {
        Calendar calendar = Calendar.getInstance();
        calendar.set(calendar.get(Calendar.YEAR),calendar.get(Calendar.MONTH),calendar.get(Calendar.DAY_OF_MONTH)-numberOfDays,0,0,0);
        long yesterdayStart  = calendar.getTimeInMillis();
        return yesterdayStart;
    }
    
/* N天前结束时间
     * 1 == 昨天
     * 2 == 前天
     * 3 == 以此类推
     */
    public static long getNumberOfDaysEndUnixTime(int numberOfDays) {
        Calendar calendar = Calendar.getInstance();
        calendar.set(calendar.get(Calendar.YEAR),calendar.get(Calendar.MONTH),calendar.get(Calendar.DAY_OF_MONTH)-numberOfDays,23,59,59);
        long yesterdayEnd = calendar.getTimeInMillis();
        return yesterdayEnd;
    }

根据json条件获取时间戳

 public static Long getTimestampByDateLimitDay(Integer day, int addYear, int addMonth, Long startTime) {
        try {
            Calendar startCal = Calendar.getInstance();
            startCal.setTime(new Date(startTime));

            Calendar cal = Calendar.getInstance();
//            String year = String.valueOf(cal.get(Calendar.YEAR));
            //根据传入的时间计算有效期 而非使用当前时间
            String year = String.valueOf(startCal.get(Calendar.YEAR));
            String month = startCal.get(Calendar.MONTH) >= 10 ? String.valueOf(startCal.get(Calendar.MONTH) + 1) : "0" + String.valueOf(startCal.get(Calendar.MONTH) + 1);
            String dayString = day >= 10 ? String.valueOf(day) : "0" + day;
            DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            Date date;
            date = df.parse(year + "-" + month + "-" + dayString + " 23:59:59");
            cal.setTime(date);
            cal.add(Calendar.YEAR, addYear);
            cal.add(Calendar.MONTH, addMonth);
            long tim = cal.getTimeInMillis();
            return tim / 1000;
        } catch (Exception e) {
            throw new BusinessException("计算积分时间异常:" + e.getMessage());
        }
    }

    public static Long getTimestampByDateLimitMonth(Integer month, Integer day, int addYear, int addMonth, Long startTime) {
        try {
            Calendar startCal = Calendar.getInstance();
            startCal.setTime(new Date(startTime));

            Calendar cal = Calendar.getInstance();
            String year = String.valueOf(startCal.get(Calendar.YEAR));
            String monthString = month >= 10 ? String.valueOf(month) : "0" + month;
            String dayString = day >= 10 ? String.valueOf(day) : "0" + day;
            DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            Date date;
            date = df.parse(year + "-" + monthString + "-" + dayString + " 23:59:59");
            cal.setTime(date);
            cal.add(Calendar.YEAR, addYear);
            cal.add(Calendar.MONTH, addMonth);
            long tim = cal.getTimeInMillis();
            return tim / 1000;
        } catch (Exception e) {
            throw new BusinessException("计算积分时间异常:" + e.getMessage());
        }
    }

根据json实例:

{"clear_rule_type":"whole","validity_days":"365","clear_type":"month","clear_date":1,"clear_rule":"last"}
{"clear_rule_type":"whole","validity_days":"365","clear_type":"year","clear_date":08-30,"clear_rule":"l_last"}

使用后

expireTime = DateUtil.getTimestampByDateLimitDay(expireCondition.getInteger("clear_date"), 0, 1, startTime);
expireTime = DateUtil.getTimestampByDateLimitMonth(
                            DateUtil.getMonthByDate(expireCondition.getString("clear_date")),
                            DateUtil.getDayByDate(expireCondition.getString("clear_date")), 1, 0, startTime);

根据日期获取指定日,月份(配合上面使用)

 public static Integer getMonthByDate(String time) {
        time = time.replace("Z", " UTC");
        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS Z");
        Date d = null;
        try {
            d = format.parse(time);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(d);
        return calendar.get(Calendar.MONTH)+1;
    }

    public static Integer getDayByDate(String time) {
        time = time.replace("Z", " UTC");
        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS Z");
        Date d = null;
        try {
            d = format.parse(time);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(d);
        return calendar.get(Calendar.DATE);
    }

    public static String getDayByDateShow(String time) {
        try{
            Date date = new Date();
            date.setTime(Long.valueOf(time)*1000);
            SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            return formatter.format(date);
        }catch (Exception e){
            log.info("时间展示转换异常"+e.getMessage());
            return time;
        }
    }

获取最近一个月的开始日期和结束日期的时间戳(从现在起算倒推30天为一个月)

public static Long getMonthStartDay() {
        Calendar calendar = Calendar.getInstance();
        calendar.add(Calendar.YEAR, 0);
        calendar.add(Calendar.MONTH, 0);
        calendar.add(Calendar.DATE, -30);
        //calendar.set(Calendar.DAY_OF_MONTH, 1);// 设置为1号,当前日期既为本月第一天
        calendar.set(Calendar.HOUR_OF_DAY, 0);
        calendar.set(Calendar.MINUTE, 0);
        calendar.set(Calendar.SECOND, 0);
        calendar.set(Calendar.MILLISECOND, 0);
        return calendar.getTimeInMillis() / 1000;
    }

    public static Long getMonthEndTime() {
        Calendar calendar = Calendar.getInstance();
        calendar.add(Calendar.YEAR, 0);
        calendar.add(Calendar.MONTH, 0);
        calendar.add(Calendar.DATE, 0);
        //calendar.set(Calendar.DAY_OF_MONTH, calendar.getActualMaximum(Calendar.DAY_OF_MONTH));// 获取当前月最后一天
        calendar.set(Calendar.HOUR_OF_DAY, 0);
        calendar.set(Calendar.MINUTE, 0);
        calendar.set(Calendar.SECOND, -1);
        calendar.set(Calendar.MILLISECOND, 0);
        return calendar.getTimeInMillis() / 1000;
    }

结合上面方法拼成一个月的开始到结束日期字符串

 public static String getDateStart2End() {
        String format = "yyyy-MM-dd HH:mm:ss";
        SimpleDateFormat sdf = new SimpleDateFormat(format);
        return sdf.format(new Date(getMonthStartDay() * 1000)) + " to " + sdf.format(new Date(getMonthEndTime() * 1000));
    }

将长整型数字转换为日期格式的字符串

public static Date convert2String(String time) {
        SimpleDateFormat sf = new SimpleDateFormat("yyyyMMdd");
        Date date;
        try {
            date = sf.parse(time);
        } catch (Exception e) {
            throw BusinessExceptionUtils.dataNotExistException("日期转换出错");
        }
        return date;
    }

比较两个日期相差天数

/**
     * date2比date1多的天数
     *
     * @param date1
     * @param date2
     * @return
     */
    public static int differentDays(Date date1, Date date2) {
        Calendar cal1 = Calendar.getInstance();
        cal1.setTime(date1);

        Calendar cal2 = Calendar.getInstance();
        cal2.setTime(date2);
        int day1 = cal1.get(Calendar.DAY_OF_YEAR);
        int day2 = cal2.get(Calendar.DAY_OF_YEAR);

        int year1 = cal1.get(Calendar.YEAR);
        int year2 = cal2.get(Calendar.YEAR);
        if (year1 != year2)   //不同一年
        {
            int timeDistance = 0;
            for (int i = year1; i < year2; i++) {
                if (i % 4 == 0 && i % 100 != 0 || i % 400 == 0)    //闰年
                {
                    timeDistance += 366;
                } else    //不是闰年
                {
                    timeDistance += 365;
                }
            }

            return timeDistance + (day2 - day1);
        } else    //同一年
        {
            System.out.println("判断day2 - day1 : " + (day2 - day1));
            return day2 - day1;
        }
    }

版权声明:本文为Koikoi12原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。