spring boot實戰之日期處理
阿新 • • 發佈:2019-01-06
web開發中經常需要對日期進行操作,如字串日期轉long,long型轉字串,日期計算等,提取一個日期處理工具類,提供常見的日期操作可以讓開發更輕鬆一些。
毫秒(long)轉字串日期
對long型時間進行格式化在web開發中是很經常出現的一個操作,這裡主要使用joda-time包內的DateTime來實現,joda-time是時間操作很好的一個工具包。
public final static String DATE_FORMAT_DEFAULT = "yyyy-MM-dd"; /** * 將毫秒時間轉換為yyyy-MM-dd格式的時間 * @author yangwenkui * @time 2017年10月6日 下午5:56:40 * @param time 毫秒數 * @return */ public static String longToString(long time) { return longToString(time, DATE_FORMAT_DEFAULT); } /** * 將毫秒時間轉換為指定格式的時間 * @author yangwenkui * @time 2017年10月6日 下午5:56:40 * @param time 毫秒數 * @param format 日期格式 * @return */ public static String longToString(long time, String format) { if (StringUtils.isBlank(format)) { format = DATE_FORMAT_DEFAULT; } DateTime dTime = new DateTime(time); return dTime.toString(format); } //新增maven依賴 <dependency> <groupId>joda-time</groupId> <artifactId>joda-time</artifactId> </dependency>
字串日期轉毫秒(long)
字串日期轉為毫秒值也是web開發內經常出現的一個場景,這裡主要根據字串的長度來判斷其格式,進而擷取字串獲取年、月、日等,再將這些值設定入calender內對應的屬性上獲取最終的時間。
/** * 將字串型別的日期轉換為毫秒數 * @author yangwenkui * @time 2017年10月6日 下午6:00:27 * @param dateStr * @return */ public static long parseStringToLong(String dateStr) { dateStr = dateStr.trim(); if (dateStr.length() == 19 || dateStr.length() == 23) { try { java.util.Calendar cal = java.util.Calendar.getInstance(); cal.set(Integer.parseInt(dateStr.substring(0, 4)), Integer.parseInt(dateStr.substring(5, 7)) - 1, Integer.parseInt(dateStr.substring(8, 10)), Integer.parseInt(dateStr.substring(11, 13)), Integer.parseInt(dateStr.substring(14, 16)), Integer.parseInt(dateStr.substring(17, 19))); cal.set(java.util.Calendar.MILLISECOND, 0); return (cal.getTime().getTime()); } catch (Exception e) { return 0; } } else if (dateStr.length() == 16) { try { java.util.Calendar cal = java.util.Calendar.getInstance(); cal.set(Integer.parseInt(dateStr.substring(0, 4)), Integer.parseInt(dateStr.substring(5, 7)) - 1, Integer.parseInt(dateStr.substring(8, 10)), Integer.parseInt(dateStr.substring(11, 13)), Integer.parseInt(dateStr.substring(14, 16))); cal.set(java.util.Calendar.MILLISECOND, 0); return (cal.getTime().getTime()); } catch (Exception e) { return 0; } } else if (dateStr.length() == 14) { try { java.util.Calendar cal = java.util.Calendar.getInstance(); cal.set(Integer.parseInt(dateStr.substring(0, 4)), Integer.parseInt(dateStr.substring(4, 6)) - 1, Integer.parseInt(dateStr.substring(6, 8)), Integer.parseInt(dateStr.substring(8, 10)), Integer.parseInt(dateStr.substring(10, 12)), Integer.parseInt(dateStr.substring(12, 14))); cal.set(java.util.Calendar.MILLISECOND, 0); return (cal.getTime().getTime()); } catch (Exception e) { return 0; } } else if (dateStr.length() == 10 || dateStr.length() == 11) { try { java.util.Calendar cal = java.util.Calendar.getInstance(); cal.set(Integer.parseInt(dateStr.substring(0, 4)), Integer.parseInt(dateStr.substring(5, 7)) - 1, Integer.parseInt(dateStr.substring(8, 10)), 0, 0, 0); cal.set(java.util.Calendar.MILLISECOND, 0); return (cal.getTime().getTime()); } catch (Exception e) { return 0; } } else if (dateStr.length() == 8 ) { try { java.util.Calendar cal = java.util.Calendar.getInstance(); cal.set(Integer.parseInt(dateStr.substring(0, 4)), Integer.parseInt(dateStr.substring(4, 6)) - 1, Integer.parseInt(dateStr.substring(6, 8)), 0, 0, 0); cal.set(java.util.Calendar.MILLISECOND, 0); return (cal.getTime().getTime()); } catch (Exception e) { return 0; } } else { try { return Long.parseLong(dateStr); } catch (Exception e) { return 0; } } }
獲取指定日期前後N天的日期
日期計算偶爾也會出現,這裡主要通過java.util.Calendar類來實現,Calendar提供了良好的介面,可以方便的獲取年、月、日、時、分、秒、周等,也可以對應的設定指定屬性的值,是很方便的日期計算工具。
/** * 獲取指定日期前後num天的日期 * @author yangwk * @time 2017年9月14日 上午11:13:18 * @param date * @param num 正數 多少天之後的日期 負數 多少天之後的日期 * @return */ public static String getDay(String date,int num){ return getDay(date, num,DATE_FORMAT_DEFAULT); } /** * 獲取指定日期前後num天的日期 * @author yangwk * @time 2017年9月14日 上午11:13:18 * @param date * @param num 正數 多少天之後的日期 負數 多少天之後的日期 * @param format 日期格式 * @return */ public static String getDay(String date,int num,String format){ long t = parseStringToLong(date); return getDay(t, num, DATE_FORMAT_DEFAULT); } /** * 獲取指定日期前後num天的日期 * @author yangwk * @time 2017年9月14日 上午11:13:18 * @param date * @param num 正數 多少天之後的日期 負數 多少天之後的日期 * @return */ public static String getDay(long date,int num){ return getDay(date, num, DATE_FORMAT_DEFAULT); } /** * 獲取指定日期前後num天的日期 * @author yangwk * @time 2017年9月14日 上午11:13:18 * @param date * @param num 正數 多少天之後的日期 負數 多少天之後的日期 * @param format 日期格式 * @return */ public static String getDay(long date,int num,String format){ Calendar calendar = Calendar.getInstance(); calendar.setTimeInMillis(date); calendar.set(Calendar.DAY_OF_MONTH, calendar.get(Calendar.DAY_OF_MONTH)+num); return longToString(calendar.getTimeInMillis(),format); }
小結
web開發內,提取常用工具類,不斷豐富開發工具包是很有意義的事,不用同樣的事情自己或其他同事重複開發很多次。本文列出了比較常用的long型時間格式化、string型別時間轉為long型毫秒數及日期計算的方法。可以基於joda-time包和calendar提前自己常用的攻擊方法。