在開發的過程中,經常會碰到各種時間的處理。下面的代碼是我對時間處理的總結,如果能對這些方法熟練應用,加以變形。可以解決大多數時間問題。
package DataUtils; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Arrays; import java.util.Calendar; import java.util.Date; import java.util.LinkedHashMap; import java.util.List; public class DataUtil { /** * 預設不同的時間格式 */ //精確到年月日(英文) eg:2019-12-31 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_LONOGRAM_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_LONOGRAM_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()); } /** * 自定義格式格式化日期 */ private 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 正數往后推,負數往前移 * Calendar:它為特定瞬間與一組諸如 YEAR、MONTH、DAY_OF_MONTH、HOUR * 等日歷字段之間的轉換提供了一些方法,並為操作日歷字段(例如獲得下星期的日期)提供了一些方法。 */ public static Date addYear(Date date,int num) { Calendar cal = Calendar.getInstance(); cal.setTime(date); cal.add(Calendar.YEAR, num); return cal.getTime(); } /** * 基於指定日期增加整月 * @param date * @param num 整數往后推,負數往前移 * @return */ public static Date addMonth(Date date,int num) { Calendar cal = Calendar.getInstance(); cal.setTime(date); cal.add(Calendar.MONTH, num); return cal.getTime(); } /** * 基於指定日期增加天數 * @param date * @param num 整數往后推,負數往前移 * @return */ public static Date addDay(Date date,int num) { Calendar cal = Calendar.getInstance(); cal.setTime(date); cal.add(Calendar.DATE, num); return cal.getTime(); } /** * 基於指定日期增加分鍾 * @param date * @param num 整數往后推,負數往前移 * @return */ 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 * @return */ public static String getTimeStamp() { SimpleDateFormat sdf = new SimpleDateFormat(FORMAT_LONOGRAM_MILL); Calendar cal = Calendar.getInstance(); return sdf.format(cal.getTime()); } /** * 獲取日期的年份 * @param date * @return */ 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 cal = Calendar.getInstance(); cal.setTime(date); return cal.get(Calendar.HOUR_OF_DAY); } /** * 自定義時間格式字符串距離今天的天數 * @param strDate * @param format * @return */ 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(); long a = time/1000; long b = diff/1000; return (int) (a - b)/3600/24; } /** * 預設格式的字符串距離今天的天數 * @param strDate * @return */ public static int countDays(String strDate) { return countDays(strDate,getDefaultFormat()); } /** * 獲取天數差值(依賴時間) * @param date1 * @param date2 * @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)); } /** * 獲取年份差值 * @param year1 * @param year2 * @return */ public static int diffYear(Date year1,Date year2) { return diffDays(year1,year2) / 365; } /** * 獲取天數差值(依賴Date類型的日期) * @param d1 * @param d2 * @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<Date>(); 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(date +" "+ t,pattern)); }); } return result; } /** * 根據日期查詢當前為周幾 * @param dt * @return */ public static String getWeekOfDate(Date dt) { String[] weekDays = {"7","1","2","3","4","5","6"}; Calendar cal = Calendar.getInstance(); cal.setTime(dt); int w = cal.get(Calendar.DAY_OF_WEEK); //1--7的值,對應:星期日,星期一,星期二,星期三....星期六 //System.out.println(w); return weekDays[w-1]; } /** * 將時間轉換成漢字 * @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 = intToCn(hourInt,timeArray) + "點\n" + intToCn(minute,timeArray) + "分"; return result; } private static String intToCn(int hourInt, String[] timeArray) { String result = ""; if(hourInt >= 0 && hourInt <= 10) { result += timeArray[hourInt] + "\n"; } else if (hourInt >= 11 && 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; } /** * 獲取當前日期后的一周時間,並返回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, i); //把日期往后增加一天,整數往后推,負數往前移動 時間戳轉時間 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, i);//把日期往后增加一天,整數往后推,負數往前移動 時間戳轉時間 Date newDate = calendar.getTime(); weekArray[i] = new SimpleDateFormat("yyyy-MM-dd").format(newDate); } } catch (Exception e) { e.printStackTrace(); } return weekArray; } /** * 根據傳入的時間獲取本周開始(0-表示本周,1-表示下周,-1-表示上周 ) * @param date * @return */ public static String getMonDayToDate(String date) { Calendar cal = Calendar.getInstance(); cal.setTime(parse(date, "yyyy-MM-dd")); // N:0-表示本周,1-表示下周,-1-表示上周 cal.add(Calendar.DATE, 0 * 7); // Calendar.MONDAY 表示獲取周一的日期; Calendar.WEDNESDAY:表示周三的日期 cal.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY); return format(cal.getTime()); } public static void main(String[] args) { //String time = format(new Date()); //String weekOfDate = getWeekOfDate(new Date()); //int countDays = countDays("2019-12-22",FORMAT_LONOGRAM); //Calendar cal = Calendar.getInstance(); // long time = cal.getTime().getTime(); // System.out.println("星期:"+weekOfDate); // String hourToCn = hourToCn(format(new Date()).substring(11, 19)); // System.out.print(hourToCn); // String[] dateAfterWeekArray = dateAfterWeekArray(format(new Date())); // for (int i = 0; i < dateAfterWeekArray.length; i++) { // System.out.println(dateAfterWeekArray[i]); // } String monDayToDate = getMonDayToDate(format(new Date())); System.out.println(monDayToDate); } }
感謝閱讀,希望能對您有所幫助!
參考博文:https://blog.csdn.net/qq_41144667/article/details/103745529