DateUtil日期工具类

package com.hcycom.mc.alarm.provider.utils;

import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.regex.Pattern;

public class DateUtil {
    //时间格式化
    public static SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    public static SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS Z");
    public static SimpleDateFormat sdf3 = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ");

    /**
     * 获取几天前的现在时间
     *
     * @param day
     * @return
     */
    public static Date getLastMommentTime(int day) throws ParseException {
        //创建Calendar 的实例
        Calendar calendar = Calendar.getInstance();
        //当前时间day天,即day天前的时间
        calendar.add(Calendar.DAY_OF_MONTH, -day);
        String time = sdf.format(calendar.getTime());
        return sdf.parse(time);
    }

    /**
     * 获取几天前的现在时间字符串
     *
     * @param day
     * @return
     */
    public static String getLastMommentTimeStr(int day) {
        //创建Calendar 的实例
        Calendar calendar = Calendar.getInstance();
        //当前时间day天,即day天前的时间
        calendar.add(Calendar.DAY_OF_MONTH, -day);
        String time = sdf.format(calendar.getTime());
        return time;
    }


    /**
     * 当前时间加上分钟
     *
     * @param minute
     * @return
     */
    public static Date setMinuteTime(int minute) throws ParseException {
        //创建Calendar 的实例
        Calendar calendar = Calendar.getInstance();
        //当前时间day天,即day天前的时间
        calendar.add(Calendar.MINUTE, minute);
        String time = sdf.format(calendar.getTime());
        return sdf.parse(time);
    }

    public static String dateFormatUTC(int minute) {
        SimpleDateFormat df = (SimpleDateFormat) DateFormat.getDateInstance();
        df.applyPattern("yyyy-MM-dd HH:mm:ss");
        //创建Calendar 的实例
        Calendar calendar = Calendar.getInstance();
        //当前时间day天,即day天前的时间
        calendar.add(Calendar.MINUTE, minute);
        String time = sdf.format(calendar.getTime());
//        if (date == null) {
//            return "1970-01-01T08:00:00.000Z";
//        }
//        long localTimeInMillis = calendar.getTime().getTime();
        /** long时间转换成Calendar */
//        calendar.setTimeInMillis(localTimeInMillis);
        /** 取得时间偏移量 */
        int zoneOffset = calendar.get(Calendar.ZONE_OFFSET);
        /** 取得夏令时差 */
        int dstOffset = calendar.get(Calendar.DST_OFFSET);
        /** 从本地时间里扣除这些差量,即可以取得UTC时间*/
        calendar.add(Calendar.MILLISECOND, -(zoneOffset + dstOffset));
        /** 取得的时间就是UTC标准时间 */
        Date utcDate = new Date(calendar.getTimeInMillis());
        String dateString = df.format(utcDate);
        Pattern pattern = Pattern.compile("\\d{4,4}-\\d{2,2}-\\d{2,2} \\d{2,2}:\\d{2,2}:\\d{2,2}");
        if (pattern.matcher(dateString).matches()) {
            return dateString.replaceAll(" ", "T") + ".000Z";
        }else {
            return "1970-01-01T08:00:00.000Z";
        }
    }


    public static Date utcFormatDate(String dateUTC) {
        Date date=new Date();
        try {
            dateUTC = dateUTC.replace("Z", " UTC");
            date = sdf2.parse(dateUTC);
        }catch (Exception e){
        }
        return date;
    }


    /**
     * 获取几小时前的现在时间
     *
     * @param hours
     * @return
     */
    public static String getLastHoursTime(int hours) throws ParseException {
        //创建Calendar 的实例
        Calendar calendar = Calendar.getInstance();
        calendar.add(Calendar.HOUR_OF_DAY, -hours);
        String time = sdf3.format(calendar.getTime());
        return time;
    }

    /**
     * 获取几分钟前的现在时间
     *
     * @param minute
     * @return
     */
    public static String setMinuteTimeBefor(int minute) throws ParseException {
        //创建Calendar 的实例
        Calendar calendar = Calendar.getInstance();
        //当前时间day天,即day天前的时间
        calendar.add(Calendar.MINUTE, -minute);
        String time = sdf3.format(calendar.getTime());
        return time;
    }



    public static String dateStringFormatUTC(String date) {
        SimpleDateFormat df = (SimpleDateFormat) DateFormat.getDateInstance();
        df.applyPattern("yyyy-MM-dd HH:mm:ss");
        //创建Calendar 的实例
        Calendar calendar = Calendar.getInstance();
        try {
            Date parse = df.parse(date);
            calendar.setTime(parse);
        }catch (Exception e){

        }
        /** 取得时间偏移量 */
        int zoneOffset = calendar.get(Calendar.ZONE_OFFSET);
        /** 取得夏令时差 */
        int dstOffset = calendar.get(Calendar.DST_OFFSET);
        /** 从本地时间里扣除这些差量,即可以取得UTC时间*/
        calendar.add(Calendar.MILLISECOND, -(zoneOffset + dstOffset));
        /** 取得的时间就是UTC标准时间 */

        Date utcDate = new Date(calendar.getTimeInMillis());
        String dateString = df.format(utcDate);
        Pattern pattern = Pattern.compile("\\d{4,4}-\\d{2,2}-\\d{2,2} \\d{2,2}:\\d{2,2}:\\d{2,2}");
        if (pattern.matcher(dateString).matches()) {
            return dateString.replaceAll(" ", "T") + ".000Z";
        }else {
            return "1970-01-01T08:00:00.000Z";
        }
    }

    public static String utcFormatDateString(String dateUTC) {
        String date="";
        try {
            dateUTC = dateUTC.replace("Z", " UTC");
            date = sdf.format(sdf2.parse(dateUTC));
        }catch (Exception e){
        }
        return date;
    }

    public static String formDate(String date, int type,int count){
        SimpleDateFormat df = (SimpleDateFormat) DateFormat.getDateInstance();
        df.applyPattern("yyyy-MM-dd HH:mm:ss");
        //创建Calendar 的实例
        Calendar calendar = Calendar.getInstance();
        try {
            Date parse = df.parse(date);
            calendar.setTime(parse);
        }catch (Exception e){
        }
        if (type == Calendar.HOUR_OF_DAY) {
            calendar.add(Calendar.HOUR_OF_DAY, count);
        } else {
            calendar.add(Calendar.DAY_OF_MONTH, count);
            calendar.add(Calendar.HOUR_OF_DAY, 8);
        }
        System.out.println(df.format(calendar.getTime()));
        return df.format(calendar.getTime());
    }

    /**
     * 获取几天前获后的传值时间
     *
     * @param day
     * @return
     */
    public static String  getAroundDayTime(String date,int day,SimpleDateFormat sdf) throws ParseException {
        //创建Calendar 的实例
        Calendar calendar = Calendar.getInstance();
        //当前时间day天,即day天前的时间
        Date parse = sdf.parse(date);
        calendar.setTime(parse);
        calendar.add(Calendar.DAY_OF_MONTH, day);
        String time = sdf.format(calendar.getTime());
        return time;
    }

    /**
     * 获取年
     *
     * @param date
     * @return
     */
    public static String  getYear(String date,SimpleDateFormat sdf) throws ParseException {
        Date parse = sdf.parse(date);
        String year=String.format("%tY", parse);
        return year;
    }

    /**
     * 获取年
     *
     * @param date
     * @return
     */
    public static String  getMonth(String date,SimpleDateFormat sdf) throws ParseException {
        Date parse = sdf.parse(date);
        String mon=String .format("%tm", parse);
        return mon;
    }


    /**
     *获取随机日期
     *@parambeginDate起始日期,格式为:yyyy-MM-dd
     *@paramendDate结束日期,格式为:yyyy-MM-dd
     *@return
     */
     public static Date randomDate(String beginDate,String endDate){
        try{
            SimpleDateFormat format=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            Date start=format.parse(beginDate);// 构造开始日期
            Date end=format.parse(endDate);// 构造结束日期
            // getTime()表示返回自 1970 年 1 月 1 日 00:00:00 GMT 以来此 Date 对象表示的毫秒数。
            if(start.getTime()>=end.getTime()){
                 return null;
            }
            long date=random(start.getTime(),end.getTime());

            return new Date(date);
        }catch(Exception e){
            e.printStackTrace();
        }
        return null;
    }

    private static long random(long begin,long end){
        long rtn=begin+(long)(Math.random()*(end-begin));
         // 如果返回的是开始时间和结束时间,则递归调用本函数查找随机值
        if(rtn==begin||rtn==end){
            return random(begin,end);
        }
        return rtn;
    }

    public static void main(String[] args) {
        SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String alarmChangeTime= "2021-05-13 10:05:46";
        String actionTime="2021-05-14 04:31:22";
        String alarmSendTime="2021-05-14 04:55:11";
        Date date = DateUtil.randomDate(actionTime, alarmSendTime);
        alarmChangeTime=sdf.format(date);
        System.out.println(alarmChangeTime);

    }

public final static int YEAR    = Calendar.YEAR;
    public final static int MONTH   = Calendar.MONTH;
    public final static int DATE    = Calendar.DATE;
    public final static int HOUR    = Calendar.HOUR;
    public final static int MINUTE  = Calendar.MINUTE;
    public final static int SECOND  = Calendar.SECOND;

    /**
     * 将yyyy-MM-dd hh:mm:ss的字符串转换为时间
     * @param str
     * @return
     */
    public static Date formatDate(String str){
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        try {
            Date d = sdf.parse(str);
            return d;
        } catch (ParseException e) {
            e.printStackTrace();
            return new Date(0);
        }
    }

    /**
     * 将时间按字符串展示
     * @param d
     * @return
     */
    public static String formatDate(Date d){
        return formatDate(d, "yyyy-MM-dd HH:mm:ss");
    }

    /**
     * 将时间按字符串展示
     * @param d
     * @param p
     * @return
     */
    public static String formatDate(Date d, String p){
        if(d.getTime()==0)
            return "";
        SimpleDateFormat sdf = new SimpleDateFormat(p);
        return sdf.format(d);
    }

    /**
     * 本地时间转换UTC
     *
     * @param date
     * @return
     */
    public static String formatUTC(Date date){
        SimpleDateFormat df = (SimpleDateFormat) DateFormat.getDateInstance();
        df.applyPattern("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'");
        if(date == null){
            return "1970-01-01T08:00:00.000Z";
        }
        long localTimeInMillis=date.getTime();
        /** long时间转换成Calendar */
        Calendar calendar= Calendar.getInstance();
        calendar.setTimeInMillis(localTimeInMillis);
        /** 取得时间偏移量 */
        int zoneOffset = calendar.get(Calendar.ZONE_OFFSET);
        /** 取得夏令时差 */
        int dstOffset = calendar.get(Calendar.DST_OFFSET);
        /** 从本地时间里扣除这些差量,即可以取得UTC时间 */
        calendar.add(Calendar.MILLISECOND, -(zoneOffset + dstOffset));
        /** 取得的时间就是UTC标准时间 */
        Date utcDate=new Date(calendar.getTimeInMillis());
        String dateString = df.format(utcDate);
        return dateString;
    }

    //获取两个时间的差绝对值
    public static long getDateDiff(Date d1, Date d2){
        return Math.abs(d1.getTime()-d2.getTime());
    }


    /**
     * 时间加减操作
     *
     * @param date 时间:需要加减的时间
     * @param time int类型:加减时长
     * @param type String类型:(YEAR,MONTH,DATE,HOUR,MINUTE,SECOND)
     * @return Date
     */
    public static Date addTime(Date date, int time, int type){
        Calendar theTime = Calendar.getInstance();
        theTime.setTime(date);
        switch (type){
            case YEAR:
                theTime.add(Calendar.YEAR,time);
                break;
            case MONTH:
                theTime.add(Calendar.MONTH,time);
                break;
            case DATE:
                theTime.add(Calendar.DATE,time);
                break;
            case HOUR:
                theTime.add(Calendar.HOUR,time);
                break;
            case MINUTE:
                theTime.add(Calendar.MINUTE,time);
                break;
            case SECOND:
                theTime.add(Calendar.SECOND,time);
                break;
        }
        return theTime.getTime();
    }

       /**
     * 时间转换为 UTC 时间
     *
     * @param localTime
     * @return
     */
    public static Date localToUTC(String localTime) {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        Date localDate = null;
        try {
            localDate = sdf.parse(localTime);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        long localTimeInMillis = localDate.getTime();
        /** long时间转换成Calendar */
        Calendar calendar = Calendar.getInstance();
        calendar.setTimeInMillis(localTimeInMillis);
        /** 取得时间偏移量 */
        int zoneOffset = calendar.get(java.util.Calendar.ZONE_OFFSET);
        /** 取得夏令时差 */
        int dstOffset = calendar.get(java.util.Calendar.DST_OFFSET);
        /** 从本地时间里扣除这些差量,即可以取得UTC时间*/
        calendar.add(java.util.Calendar.MILLISECOND, -(zoneOffset + dstOffset));
        /** 取得的时间就是UTC标准时间 */
        Date utcDate = new Date(calendar.getTimeInMillis());
        return utcDate;
    }

    public static String utcToLocal(String oldDate) {
        Date date1 = null;
        DateFormat df2 = null;
        try {
            oldDate= oldDate.replace("Z", " UTC");
            DateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS Z");
            Date date = df.parse(oldDate);
            SimpleDateFormat df1 = new SimpleDateFormat ("EEE MMM dd HH:mm:ss Z yyyy", Locale.UK);
            date1 = df1.parse(date.toString());
            df2 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return df2.format(date1);
    }
}



根据日期字符串 获取该月的起始日期和结束日期

String date=2017-07;//日期2017-07
		String types=json.optString("types");//代理商类型
		Calendar calendar= Calendar.getInstance();
		calendar.set(Calendar.YEAR, Integer.parseInt(date.substring(0, 4)));
		calendar.set(Calendar.MONTH, Integer.parseInt(date.substring(5, 7))-1);
		calendar.set(Calendar.DATE, 1);
		Date time = calendar.getTime();
		SimpleDateFormat sd=new SimpleDateFormat("yyyyMMdd");
		String startDate = sd.format(time);		//20170701
		int daysOfMonth = calendar.getActualMaximum(Calendar.DAY_OF_MONTH);
		calendar.set(Calendar.DATE, daysOfMonth);
		Date time2 = calendar.getTime();
		String endDate = sd.format(time2);	//20170731
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值