Java常用時間格式轉換工具類

開發過程中,經常遇到各種時間格式的轉換。今天特此以博客的方式,記錄開發過程中可能遇到的各種類型時間的格式轉換,以工具類的方式引入,方便大家開發中使用!

public final class DataUtils{
	/**
	 * 預設不同的時間格式
	 */
	//精確到年月日(英文) eg:2019-11-11
	public static String FORMAT_LONOGRAM = "yyyy-MM-dd"	;
	//精確到時分秒的完整時間(英文) eg:2010-11-11 12:12:12
	public static String FORMAT_FULL = "yyyy-MM-dd HH:mm:ss";
	//精確到毫秒完整時間(英文) eg:2019-11-11 12:12:12.55
	public static String FORMAT_FULL_MILL = "yyyy-MM-dd HH:mm:ss.SSS"
	//精確到年月日(中文)eg:2019年11月11日
	public static String FORMAT_LONOGRAM_CN = "yyyy年MM月dd日"
    //精確到時分秒的完整時間(中文)eg:2019年11月11日 12時12分12秒
	public static String FORMAT_FULL_CN = "yyyy年MM月dd日 HH時mm分ss秒"
	//精確到毫秒完整時間(中文)
	public static String FORMAT_FULL_MILL_CN = "yyyy年MM月dd日 HH時mm分ss秒SSS毫秒"
	/**
	 *預設默認的時間格式
	 */
	public static String getDefaultFormat(){return FORMAT_FULL};
	
    /**
     * 預設格式格式化日期
     */
    public static String format(Date date) {
        return format(date, getDefaultFormat());
    }
    
    /**
     *自定義格式格式化日期
     */
    public static String format(Date date,String format){
    	String value = "";
    	if(date!=null){
    		SimpleDateFormat sdf = new SimpleDateFormat(format);
    		value = sdf.format(date);
    	}
    	return value;
    }
    
    /**
	 *根據預設默認格式,返回當前日期
	 */
	public static String getNow(){return format(new Date());}
	
	/**
	 *自定義時間格式,返回當前日期
	 */
	public static String getNow(String format){return format(new Date(),format);}

	/**
	 *根據預設默認時間 String->Date
	 */
	public static Date parse(String strDate){return parse(strDate,getDefaultFormat)};
	
	/**
	 *自定義時間格式:Stirng->Date
	 */
	public static Date parse(String strDate,String format){
		SimpleDateFormat sdf = new SimpleDateFormat(format);
		try{
			return sdf.parse(strDate);
		}catch(ParseException e){
			e.printStackTrace();
			return null;
		}
	}

	/**
	 *基於指定日期增加年
	 *@param num  整數往後推,負數往前移
	 */
	public static Date addMobth(Date date,int num){
    	Calendar= Calendar.getInstance();
    	cal.setTime(date);
    	cal.add(Calendar.YEAR,num);
    	return cal.getTime();
    }

	/**
	 *基於指定日期增加整月
	 *@param num  整數往後推,負數往前移
	 */
    public static Date addMobth(Date date,int num){
    	Calendar= Calendar.getInstance();
    	cal.setTime(date);
    	cal.add(Calendar.MONTH,num);
    	return cal.getTime();
    }
    
    /**
	 *基於指定日期增加天數
	 *@param num  整數往後推,負數往前移
	 */
	public static Date addDay(Date date, int num) {
        Calendar cal = Calendar.getInstance();
        cal.setTime(date);
        cal.add(Calendar.DATE, num);
        return cal.getTime();
    }

    /**
	 *基於指定日期增加分鐘
	 *@param num  整數往後推,負數往前移
	 */
	public static Date addMinute(Date date, int num) {
        Calendar cal = Calendar.getInstance();
        cal.setTime(date);
        cal.add(Calendar.MINUTE, num);
        return cal.getTime();
    }

	/**
	 *獲取時間戳 eg:yyyy-MM-dd HH:mm:ss.S
	 */
	public static String getTimeStamp(){
		SimpleDateFormat sdf = new SimpleDateFormat(FORMAT_FULL_MILL);
		Calendar cal = Calendar.getInstance();
		return sdf.format(Calendar.getTime());
	}
	
	/**
	 *獲取日期年份
	 */
	public static String getYear(Date date){return format(date).substring(0,4);}

	/**
	 *獲取年份+月
	 */
	public static String getYearMonth(Date date){return format(date).substring(0,7);}
	
	/**
	 *獲取日期的小時數
	 */
	public static int getHour(Date date){
		Calendar calendar = Calendar.getInstrance();
		calendar.setTime(date);
		return calendar.get(Calendar.HOUR_OFDAY);
	}

	/**
	 *自定義時間格式字符串距離今天的天數
	 */
	public static int countDays(String strDate,String format){
		long time = Calendar.getInstance.getTime().getTime();
		Calendar cal = Calendar.getInstance();
		cal.setTime(parse(strDate,format));
		long diff = cal.getTime().getTime();
		return (int) (time/1000 - diff/1000)/3600/24;
	}

	/**
	 * 預設格式的字符串距離今天的天數
	 */
	public static int countDays(String strDate){return countDays(strDate,getDefaultFormat());}

	 /**
     * 獲取天數差值(依賴時間)
     * @return
     */
    public static int diffDays(Date date1, Date date2) {
        if (date1 == null || date2 == null) return 0;
        return (int) (Math.abs(date1.getTime() - date2.getTime()) / (60 * 60 * 24 * 1000));
    }
 
    /**
     *獲取年份差值
     */
    public static int diffYear(Date year1,Date year2){return diffDays(year1,year2) / 365;}

	 /**
     * 獲取天數差值(依賴Date類型的日期)
     * @return
     */
    public static int diffByDays(Date d1, Date d2) {
        Date s1 = parse(format(d1, FORMAT_LONOGRAM ), FORMAT_LONOGRAM );
        Date s2 = parse(format(d2, FORMAT_LONOGRAM ), FORMAT_LONOGRAM );
        return diffDays(s1, s2);
    }
	
	 /**
     * 獲取時間分割集合
     *
     * @param date 查詢日期
     * @param strs 帶拆分的時間點
     * @return
     */
    public static List<Date> collectTimes(Date date, String[] strs) {
        List<Date> result = new ArrayList<>();
        List<String> times = Arrays.asList(strs);
        String dateStr = format(date, FORMAT_LONOGRAM );
        String pattern = FORMAT_LONOGRAM + " k";
        if (times.size() > 0) {
            times.stream().forEach(t -> {
                result.add(parse(dateStr + " " + t, pattern));
            });
        }
        return result;
    }

	 /**
     * 根據日期查詢當前爲周幾
     * @param dt
     * @return
     */
    public static String getWeekOfDate(Date dt) {
        String[] weekDays = {"1", "2", "3", "4", "5", "6", "7"};
        Calendar cal = Calendar.getInstance();
        cal.setTime(dt);
        int w = cal.get(Calendar.DAY_OF_WEEK);
        if (0 == w) {
            w = 7;
        }
        return weekDays[w];
    }
		
	public static String intToCn(int hourInt, String[] timeArray) {
        String result = "";
        if (0 <= hourInt && hourInt <= 10) {
            result += timeArray[hourInt] + "\n";
        } else if (11 <= hourInt && hourInt <= 19) {
            result += (timeArray[10] + "\n" + timeArray[hourInt % 10]) + "\n";
        } else {
            result += (timeArray[hourInt / 10] + "\n" + timeArray[10] + "\n" + (hourInt % 10 == 0 ? "" : timeArray[hourInt % 10] + "\n"));
        }
        return result;
    }
	
	/**
     * 將時間轉換成漢字
     * @param hour
     * @return
     */
    public  static String hourToCn(String hour){
    	String[] timeArray = {"零", "一", "二", "三", "四", "五", "六", "七", "八", "九", "十"};
    	String[] hourArray = hour.split(":");
    	int hourInt = Integer.parseInt(hourArray[0]);
        int minute = Integer.parseInt(hourArray[1]);
        String result = intToZh(hourInt, timeArray) + "點\n" + intToZh(minute, timeArray) + "分";
        return result;
    }

	/**
     * 獲取當前日期後的一週時間,並返回LinkedHashMap<String, Date>
     * @param startTime
     * @return
     */
    public static LinkedHashMap<String, Date> dateAfterWeek(String startTime) {
        LinkedHashMap<String, Date> result = new LinkedHashMap<>();
        try {
            Date date = parse(startTime,FORMAT_LONOGRAM);
            for (int i = 0; i < 7; i++) {
                Calendar calendar = Calendar.getInstance();
                calendar.setTime(date);
                calendar.add(calendar.DATE, m); //把日期往後增加一天,整數往後推,負數往前移動  時間戳轉時間
                Date newDate = calendar.getTime();
                String str = new SimpleDateFormat("yyyy-MM-dd").format(newDate);
                result.put(str, newDate);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return result;
    }

	/**
     * 獲取當前日期 後的一週時間,並返回yyyy-MM-dd字符串數組
     * @param startTime
     * @return
     */
    public static String[] dateAfterWeekArray(String startTime) {
        String weekArray[] = new String[7];
        try {
            Date date = parse(startTime,FORMAT_LONOGRAM);
            for (int i = 0; i < 7; i++) {
                Calendar calendar = Calendar.getInstance();
                calendar.setTime(date);
                calendar.add(calendar.DATE, m); //把日期往後增加一天,整數往後推,負數往前移動  時間戳轉時間
                Date newDate = calendar.getTime();
                weekArray[m] = new SimpleDateFormat("yyyy-MM-dd").format(newDate);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return weekArray;
    }
	
	 
	
	
	
	
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章