JAVA後臺時間各種格式相互轉換
阿新 • • 發佈:2019-02-01
public class DateUtil { private static final Log log = LogFactory.getLog(DateUtil.class); /** 年月日 時分秒模式字串 */ public static final String YEAR_MONTH_DAY_HOUR_MINUTE_SECOND_PATTERN = "yyyy-MM-dd HH:mm:ss"; /** 年月日模式字串 */ public static final String YEAR_MONTH_DAY_PATTERN = "yyyy-MM-dd"; /** 時分秒模式字串 */ public static final String HOUR_MINUTE_SECOND_PATTERN = "HH:mm:ss"; /** 年月日時分模式字串 */ public static final String YMDHMS_PATTERN = "yyyy-MM-dd HH:mm"; /** 年月日時模式字串 */ public static final String YMDH_PATTERN = "yyyy-MM-dd HH"; /** * 獲取時間差 * * @param date1 * @param date2 * @return 小時數 */ public static int getHourDifference(Date before, Date after) { if (before != null && after != null) { return (int) ((before.getTime() - after.getTime()) / (1000 * 60)); } return 0; } /** * 獲取時間差 保留小數點後一位有效數字 * @param date1 * @param date2 * @return 小時數 */ public static Double getDoubleHourDifference(Date before, Date after){ Double hour = 0d; if(before!=null && after!=null){ DecimalFormat df = new DecimalFormat("#.0"); Long l = before.getTime() - after.getTime(); hour = l.doubleValue()/(1000 * 60 * 60); hour = Double.parseDouble(df.format(hour)); } return hour; } /** * 獲取時間差 * @param date1 * @param date2 * @return 分 */ public static int getMinuteDifference(Date before, Date after){ if(before!=null && after!=null){ return (int) ((before.getTime() - after.getTime())/(1000 * 60 * 60 * 60)); } return 0; } /** * 獲取當前時間減去xx小時前的時間 * * @param date * @param hour * @return */ public static Date getDateDifference(int hour) { return addHour(new Date(), -hour); } /** * 根據傳入的年、月、日構造日期物件 * * @param year * 年 * @param month * 月 * @param date * 日 * @return 返回根據傳入的年、月、日構造的日期物件 */ public static Date getDate(final int year, final int month, final int date) { Calendar c = Calendar.getInstance(); c.set(year + 1900, month, date); return c.getTime(); } /** * 根據傳入的日期格式化pattern將傳入的日期格式化成字串。 * * @param date * 要格式化的日期物件 * @param pattern * 日期格式化pattern * @return 格式化後的日期字串 */ public static String format(final Date date, final String pattern) { DateFormat df = new SimpleDateFormat(pattern); return df.format(date); } /** * 將傳入的日期按照預設形勢轉換成字串(yyyy-MM-dd) * * @param date * 要格式化的日期物件 * @return 格式化後的日期字串 */ public static String format(final Date date) { return format(date, YEAR_MONTH_DAY_PATTERN); } /** * 獲取(yyyy-MM-dd HH:mm)格式的日期時間 * * @param date * 要格式化的日期物件 * @return 格式化後的日期字串 */ public static String formatDateTime(final Date date) { return format(date, YMDHMS_PATTERN); } /** * 獲取(yyyy-MM-dd HH:mm:ss)格式的日期時間 * * @param date * 要格式化的日期物件 * @return 格式化後的日期字串 */ public static String formatLongDateTime(final Date date) { return format(date, YEAR_MONTH_DAY_HOUR_MINUTE_SECOND_PATTERN); } /** * 獲取(yyyy-MM-dd HH)格式的日期時間 * * @param date * 要格式化的日期物件 * @return 格式化後的日期字串 */ public static String formatYMDHDateTime(final Date date) { return format(date, YMDH_PATTERN); } /** * 根據傳入的日期格式化patter將傳入的字串轉換成日期物件 * * @param dateStr * 要轉換的字串 * @param pattern * 日期格式化pattern * @return 轉換後的日期物件 * @throws ParseException * 如果傳入的字串格式不合法 */ public static Date parse(final String dateStr, final String pattern) throws ParseException { DateFormat df = new SimpleDateFormat(pattern); return df.parse(dateStr); } /** * 將傳入的字串按照預設格式轉換為日期物件(yyyy-MM-dd) * * @param dateStr * 要轉換的字串 * @return 轉換後的日期物件 * @throws ParseException * 如果傳入的字串格式不符合預設格式(如果傳入的字串格式不合法) */ public static Date parse(final String dateStr) throws ParseException { if (dateStr.length() == YEAR_MONTH_DAY_PATTERN.length()) { return parse(dateStr + " 00:00:00", YEAR_MONTH_DAY_PATTERN); } else if (dateStr.length() == YMDHMS_PATTERN.length()) { return parse(dateStr + ":00", YMDHMS_PATTERN); } else { return parse(dateStr, YEAR_MONTH_DAY_PATTERN); } } /** * 獲取指定日期的中文顯示名(如:2016年11月23日 星期三) * * @param d * 日期 * @return 中文日期 */ public static String getLocalDate(Date d) { String date = ""; if (d != null) { Locale l = new Locale("zh", "CN"); DateFormat df = DateFormat.getDateInstance(DateFormat.FULL, l); try { date = df.format(d); } catch (Exception e) { log.error("日期格式轉換出現異常:" + e); } } return date; } /** * 獲取當前日期的中文顯示名(如:2016年11月23日 星期三) * * @return 中文顯示名 */ public static String getLocalDate() { String date = ""; Locale l = new Locale("zh", "CN"); DateFormat df = DateFormat.getDateInstance(DateFormat.FULL, l); try { date = df.format(new Date()); } catch (Exception e) { log.error("日期格式轉換出現異常:" + e); } return date; } /** * 獲取當前時間的中文顯示名(如:下午02時07分00秒) * * @return 中文顯示時間 */ public static String getLocalTime() { Locale l = new Locale("zh", "CN"); DateFormat df = DateFormat.getTimeInstance(DateFormat.LONG, l); String time = ""; try { time = df.format(new Date()); } catch (Exception e) { log.error("日期格式轉換出現異常:" + e); } return time; } /** * 獲取指定時間的中文顯示名(如:下午02時07分00秒) * * @param d * 時間 * @return 中文時間 */ public static String getLocalTime(Date d) { Locale l = new Locale("zh", "CN"); DateFormat df = DateFormat.getTimeInstance(DateFormat.LONG, l); String time = ""; try { time = df.format(d); } catch (Exception e) { log.error("日期格式轉換出現異常:" + e); } return time; } /** * 獲取指定Date的中文日期與時間(如:2016年11月22日 下午2:07) * * @param d * 時間 * @return 中文日期與時間 */ public static String getLocalDateAndTime(Date d) { String dateAndTime = ""; if (d != null) { Locale l = new Locale("zh", "CN"); DateFormat df = DateFormat.getDateTimeInstance(DateFormat.LONG, DateFormat.SHORT, l); try { dateAndTime = df.format(d); } catch (Exception e) { log.error("日期格式轉換出現異常:" + e); } } return dateAndTime; } /** * 將某個日期增加指定年數,並返回結果。如果傳入負數,則為減。 * * @param date * 要操作的日期物件 * @param ammount * 要增加年的數目 * @return 結果日期物件 */ public static Date addYear(final Date date, final int ammount) { Calendar c = Calendar.getInstance(); c.setTime(date); c.add(Calendar.YEAR, ammount); return c.getTime(); } /** * 將某個日期增加指定月數,並返回結果。如果傳入負數,則為減。 * * @param date * 要操作的日期物件 * @param ammount * 要增加月的數目 * @return 結果日期物件 */ public static Date addMonth(final Date date, final int ammount) { Calendar c = Calendar.getInstance(); c.setTime(date); c.add(Calendar.MONTH, ammount); return c.getTime(); } /** * 將某個日期增加指定天數,並返回結果。如果傳入負數,則為減。 * * @param date * 要操作的日期物件 * @param ammount * 要增加天的數目 * @return 結果日期物件 */ public static Date addDay(final Date date, final int ammount) { Calendar c = Calendar.getInstance(); c.setTime(date); c.add(Calendar.DATE, ammount); return c.getTime(); } /** * 將某個日期增加指定小時數,並返回結果。如果傳入負數,則為減。 * * @param date * 要操作的日期物件 * @param hour * 要增加天的小時數 * @return 結果日期物件 */ public static Date addHour(final Date date, final int hour) { Calendar nowDate = Calendar.getInstance(); nowDate.add(Calendar.HOUR, hour); Date agoDate = (Date) nowDate.getTime(); return agoDate; } /** * 將某個日期增加指定分鐘數,並返回結果。如果傳入負數,則為減。 * * @param date * 要操作的日期物件 * @param minute * 要增加的分鐘數 * @return 結果日期物件 */ public static Date addMinute(final Date date, final int minute) { Calendar nowDate = Calendar.getInstance(); nowDate.add(Calendar.MINUTE, minute); Date agoDate = (Date) nowDate.getTime(); return agoDate; } /** * 返回給定的beforeDate比afterDate早的年數。如果beforeDate晚於afterDate,則 返回負數。 * * @param beforeDate * 要比較的早的日期 * @param afterDate * 要比較的晚的日期 * @return beforeDate比afterDate早的年數,負數表示晚。 */ public static int beforeYears(final Date beforeDate, final Date afterDate) { Calendar beforeCalendar = Calendar.getInstance(); beforeCalendar.setTime(beforeDate); beforeCalendar.set(Calendar.MONTH, 1); beforeCalendar.set(Calendar.DATE, 1); beforeCalendar.set(Calendar.HOUR, 0); beforeCalendar.set(Calendar.SECOND, 0); beforeCalendar.set(Calendar.MINUTE, 0); Calendar afterCalendar = Calendar.getInstance(); afterCalendar.setTime(afterDate); afterCalendar.set(Calendar.MONTH, 1); afterCalendar.set(Calendar.DATE, 1); afterCalendar.set(Calendar.HOUR, 0); afterCalendar.set(Calendar.SECOND, 0); afterCalendar.set(Calendar.MINUTE, 0); boolean positive = true; if (beforeDate.after(afterDate)) positive = false; int beforeYears = 0; while (true) { boolean yearEqual = beforeCalendar.get(Calendar.YEAR) == afterCalendar .get(Calendar.YEAR); if (yearEqual) { break; } else { if (positive) { beforeYears++; beforeCalendar.add(Calendar.YEAR, 1); } else { beforeYears--; beforeCalendar.add(Calendar.YEAR, -1); } } } return beforeYears; } /** * 返回給定的beforeDate比afterDate早的月數。如果beforeDate晚於afterDate,則 返回負數。 * * @param beforeDate * 要比較的早的日期 * @param afterDate * 要比較的晚的日期 * @return beforeDate比afterDate早的月數,負數表示晚。 */ public static int beforeMonths(final Date beforeDate, final Date afterDate) { Calendar beforeCalendar = Calendar.getInstance(); beforeCalendar.setTime(beforeDate); beforeCalendar.set(Calendar.DATE, 1); beforeCalendar.set(Calendar.HOUR, 0); beforeCalendar.set(Calendar.SECOND, 0); beforeCalendar.set(Calendar.MINUTE, 0); Calendar afterCalendar = Calendar.getInstance(); afterCalendar.setTime(afterDate); afterCalendar.set(Calendar.DATE, 1); afterCalendar.set(Calendar.HOUR, 0); afterCalendar.set(Calendar.SECOND, 0); afterCalendar.set(Calendar.MINUTE, 0); boolean positive = true; if (beforeDate.after(afterDate)) positive = false; int beforeMonths = 0; while (true) { boolean yearEqual = beforeCalendar.get(Calendar.YEAR) == afterCalendar .get(Calendar.YEAR); boolean monthEqual = beforeCalendar.get(Calendar.MONTH) == afterCalendar .get(Calendar.MONTH); if (yearEqual && monthEqual) { break; } else { if (positive) { beforeMonths++; beforeCalendar.add(Calendar.MONTH, 1); } else { beforeMonths--; beforeCalendar.add(Calendar.MONTH, -1); } } } return beforeMonths; } /** * 返回給定的beforeDate比afterDate早的天數。如果beforeDate晚於afterDate,則 返回負數。 * * @param beforeDate * 要比較的早的日期 * @param afterDate * 要比較的晚的日期 * @return beforeDate比afterDate早的天數,負數表示晚。 */ public static int beforeDays(final Date beforeDate, final Date afterDate) { Calendar beforeCalendar = Calendar.getInstance(); beforeCalendar.setTime(beforeDate); beforeCalendar.set(Calendar.HOUR, 0); beforeCalendar.set(Calendar.SECOND, 0); beforeCalendar.set(Calendar.MINUTE, 0); Calendar afterCalendar = Calendar.getInstance(); afterCalendar.setTime(afterDate); afterCalendar.set(Calendar.HOUR, 0); afterCalendar.set(Calendar.SECOND, 0); afterCalendar.set(Calendar.MINUTE, 0); boolean positive = true; if (beforeDate.after(afterDate)) positive = false; int beforeDays = 0; while (true) { boolean yearEqual = beforeCalendar.get(Calendar.YEAR) == afterCalendar .get(Calendar.YEAR); boolean monthEqual = beforeCalendar.get(Calendar.MONTH) == afterCalendar .get(Calendar.MONTH); boolean dayEqual = beforeCalendar.get(Calendar.DATE) == afterCalendar .get(Calendar.DATE); if (yearEqual && monthEqual && dayEqual) { break; } else { if (positive) { beforeDays++; beforeCalendar.add(Calendar.DATE, 1); } else { beforeDays--; beforeCalendar.add(Calendar.DATE, -1); } } } return beforeDays; } /** * 返回傳人日期是星期幾:週日是0、週一是1...週六是6 * * @param date * @return */ public static int getDayOfWeek(Date date) { Calendar c = Calendar.getInstance(); c.setTime(date); return c.get(Calendar.DAY_OF_WEEK) - 1; } /** * 獲取給定日期物件的年 * * @param date * 日期物件 * @return 年 */ public static int getYear(final Date date) { Calendar c = Calendar.getInstance(); c.setTime(date); return c.get(Calendar.YEAR); } /** * 獲取給定日期物件的月 * * @param date * 日期物件 * @return 月 */ public static int getMonth(final Date date) { Calendar c = Calendar.getInstance(); c.setTime(date); return c.get(Calendar.MONTH) + 1; } /** * 獲取給定日期物件的天 * * @param date * 日期物件 * @return 天 */ public static int getDay(final Date date) { Calendar c = Calendar.getInstance(); c.setTime(date); return c.get(Calendar.DATE); } /** * 獲取給定日期物件的時 * * @param date * 日期物件 * @return 時 */ public static int getHour(final Date date) { Calendar c = Calendar.getInstance(); c.setTime(date); return c.get(Calendar.HOUR_OF_DAY); } /** * 獲取給定日期物件的分 * * @param date * 日期物件 * @return 分 */ public static int getMinute(final Date date) { Calendar c = Calendar.getInstance(); c.setTime(date); return c.get(Calendar.MINUTE); } /** * 獲取給定日期物件的秒 * * @param date * 日期物件 * @return 秒 */ public static int getSecond(final Date date) { Calendar c = Calendar.getInstance(); c.setTime(date); return c.get(Calendar.SECOND); } /** * 計算兩個時間相隔的天數小時和分【兩個時間順序無影響】 * * @param befor * 時間引數 1 格式:yyyy-MM-dd HH:mm:ss * @param after * 時間引數 2 格式:yyyy-MM-dd HH:mm:ss * @return long[] 返回值為:{天, 時, 分} */ public static long[] getDistanceDayHourMin(Date befor,Date after) { long day = 0; long hour = 0; long min = 0; try { long time1 = befor.getTime(); long time2 = after.getTime(); long diff; if (time1 < time2) { diff = time2 - time1; } else { diff = time1 - time2; } day = diff / (24 * 60 * 60 * 1000); hour = (diff / (60 * 60 * 1000) - day * 24); min = ((diff / (60 * 1000)) - day * 24 * 60 - hour * 60); } catch (Exception e) { log.error(e.getLocalizedMessage(), e); } long[] dhm = { day, hour, min }; return dhm; } /** * * @Title: getDistanceDay * @Description: 計算兩個時間 共持續的天數 * @param @param befor * @param @param after * @param @return 設定檔案 * @return long 返回型別 * @author heweihui * @throws */ public static long getDistanceDay(Date befor,Date after) { long day = 0; try { long time1 = befor.getTime(); long time2 = after.getTime(); long diff; if (time1 < time2) { diff = time2 - time1; } else { diff = time1 - time2; } day = diff / (24 * 60 * 60 * 1000) + 1; /*if(diff != 0){ }*/ } catch (Exception e) { log.error(e.getLocalizedMessage(), e); } return day; } /** * * @Title: getStartDate * @Description: 獲取給定日期 增加ammount天 零點的日期 傳入正數則為增加,傳入負數則為減去 * @param @param date 日期 * @param @param ammount 天數 * @param @return 設定檔案 * @return Date 日期 * @author heweihui * @throws */ public static Date getStartDate(final Date date, final int ammount){ Calendar c = Calendar.getInstance(); c.setTime(addDay(date,ammount)); c.set(Calendar.HOUR_OF_DAY, 0); c.set(Calendar.MINUTE, 0); c.set(Calendar.SECOND, 0); c.set(Calendar.MILLISECOND, 0); return c.getTime(); } /** * * @Title: getEndDate * @Description: 獲取給定日期 增加ammount天 末點的日期 傳入正數則為增加,傳入負數則為減去 * @param @param date * @param @param ammount * @param @return 設定檔案 * @return Date 日期 * @author heweihui * @throws */ public static Date getEndDate(final Date date, final int ammount){ Calendar c = Calendar.getInstance(); c.setTime(addDay(date,ammount)); c.set(Calendar.HOUR_OF_DAY, 23); c.set(Calendar.MINUTE, 59); c.set(Calendar.SECOND, 59); c.set(Calendar.MILLISECOND, 999); return c.getTime(); } @Test public void test() throws ParseException { // System.out.println(getDistanceDayHourMin( // parse("2016-12-09 03:23:00", // YEAR_MONTH_DAY_HOUR_MINUTE_SECOND_PATTERN), // parse("2016-12-07 22:23:00", // YEAR_MONTH_DAY_HOUR_MINUTE_SECOND_PATTERN))); /*List<String> list =new ArrayList<String>(); list.add("1"); list.add("2"); list.add("3"); list.add("4"); list.add("5"); list.add("6"); int s=0;int l=2; int e=s*l+l; List<String> list1= list.subList(s*2, e); s++;e=s*l+l; List<String> list11= list.subList(s*2, e); s++;e=s*l+l; List<String> list12= list.subList(s*2, e); s++;e=s*l+l; //List<String> list13= list.subList(s*2, e); System.out.println(getStartDate(new Date(),-2));*/ /*Date date = new Date(); Date date1 = addDay(date, -1); System.out.println(format(date)); System.out.println(format(date1)); int a = beforeDays(date1, date); long b = getDistanceDay(date1, date); System.out.println(a); System.out.println(b);*/ /*Long day = DateUtil.getDistanceDay(DateUtil.parse("2016-12-26"), DateUtil.parse("2016-12-27")); System.out.println(day);*/ /*Double b = 7.88890; BigDecimal decimal = new BigDecimal(b); decimal = decimal.setScale(0, RoundingMode.HALF_UP); System.out.println(decimal);*/ /*Dictionary dictionary = new Dictionary(); dictionary.setDictp((byte) 9); //if (dictp == dictionary.getDictp()) { String a = "omo.xls"; String[] b = a.split("\\."); System.out.println(b.length);*/ String a = ",1188,1191,10375,10376"; System.out.println(a.substring(1)); String path = SystemParam.getProperties("APP_MAINTAIN_REPORT_PATH"); System.out.println(path); } }