java時間操作相關小結(9種)
阿新 • • 發佈:2018-11-16
時間打磨了性子,我只能這麼說。現在我都考慮一些比較持久的東西了,例如買個紫砂壺,泡製各式各樣的茶葉,然後戒掉飲料和糖果。最近,也沒有什麼心理活動了,是不是又開始變得隨和了,變得無所企及。俗話說的好:無欲則剛,有容乃大。
現附上,時間操作的9種方法小結。
package com.css.java.learning.service; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Calendar; import java.util.Date; import java.util.List; import com.css.util.DateUtil; import com.css.util.StringHelper; public class RedAntDateUtil extends DateUtil { //設定三種常用時間格式 public static final String FORMAT_TIMESTAMP = "yyyyMMddHHmmss"; public static final String FORMAT_TIME = "yyyy-MM-dd HH:mm:ss"; public static final String FORMAT_DATE = "yyyy-MM-dd"; /** *1、 獲取當前時間戳 * @return */ public static Long getTimestamp() { return new Date().getTime(); } /** * 2、時間解析為字串 * @param date 為NULL時,使用系統當前時間 * @param format 為NULL或空串時,使用FORMAT_DATE * @return 日期按指定型別格式化後的字串 */ public static String convertDateToStr(Date date, String format) { Calendar cal = Calendar.getInstance(); if (date == null) { return ""; } cal.setTime(date); if (StringHelper.isEmpty(format)) { format = FORMAT_TIME; } SimpleDateFormat sdf = new SimpleDateFormat(format, java.util.Locale.US); return sdf.format(cal.getTime()); } /** * 3、字串解析為時間 * @param str 為NULL或空串時,返回NULL * @param format 為NULL或空串時,使用FORMAT_DATE * @return 字串按指定型別格式化後的日期 */ public static Date convertStrToDate(String str, String format) { if (StringHelper.isEmpty(str)) { return null; } if (StringHelper.isEmpty(format)) { format = FORMAT_TIME; } SimpleDateFormat sdf = new SimpleDateFormat(format, java.util.Locale.US); try { return sdf.parse(str); } catch (ParseException e) { e.printStackTrace(); return null; } } /** * 4、字串先解析為時間,然後把時間格式化為字串(將字串格式化為標準格式的字串時間) * @param str 為NULL或空串時,返回NULL * @param formatSource (輸入字串格式)為NULL或空串時,使用FORMAT_DATE * @param formatTarget (輸出字串格式)為NULL或空串時,使用FORMAT_DATE * @return 字串按指定型別格式化後的字串 */ public static String formatStr(String str, String formatSource, String formatTarget) { return convertDateToStr(convertStrToDate(str, formatSource), formatTarget); } /** * 5、得到從起始年份到今天的年份列表 * @param startDate 輸入起始時間:格式為"2018-01-01 00:00:00" * @throws ParseException */ public static List<String> getYearList(String startDate) { Calendar cal = Calendar.getInstance(); Date fromDate = convertStrToDate(startDate, null); cal.setTime(fromDate); Calendar endCal = Calendar.getInstance(); List<String> calList = new ArrayList<String>(); while (cal.before(endCal)) { calList.add(String.valueOf(cal.get(Calendar.YEAR))); cal.add(Calendar.YEAR, 1);// 加一年 } return calList; } /** * 6、獲取某月份,所有的周 的日期段(1-7) * monthOfYear 的格式為:"2017/6" */ public static void getweekofMonth(String monthOfYear) { SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd"); sdf.setLenient(false); SimpleDateFormat sdft = new SimpleDateFormat("EEE"); for (int i = 1; i < 32; i++) { try { Date date = sdf.parse(monthOfYear+ "/" + i); System.err.println(sdf.format(date) + ":" + sdft.format(date)); } catch (java.text.ParseException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } /** * 7、根據當前日期,獲取所在周 */ @SuppressWarnings("static-access") public static Integer getTimeInterval(Date date){ Calendar cal = Calendar.getInstance(); cal.setTime(date); int dayWeek = cal.get(cal.DAY_OF_WEEK) - 1;//中西方,對每週的定義不同 return dayWeek; } /** * 8、根據星期幾來匹配當前年月對應該星期幾的具體日期個數(例如:找出當前月份所有星期三的日期個數) * @param k 當前月份,包含星期幾的數目 * @param weekTime 星期幾 * @param seYear 年 * @param seMonth 月 * @return k */ public static int getYearMonthContentWeek(int k, String weekTime, String seYear, String seMonth) { SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd"); SimpleDateFormat sdft = new SimpleDateFormat("EEE"); Calendar cal = Calendar.getInstance(); cal.set(Integer.valueOf(seYear), Integer.valueOf(seMonth), 0); int dayofMonth = cal.get(Calendar.DAY_OF_MONTH); for (int j = 1; j < dayofMonth + 1; j++) { try { Date date = sdf.parse(seYear + "/"+ seMonth + "/" + j); if(sdft.format(date).equals(weekTime)){ k++; } } catch (ParseException e) { e.printStackTrace(); } } return k; } /** * 9、根據出生日期, 計算當前年齡 * @param birthday * @return 年齡 */ public static int getAgeByBirthday(String birthday) { Calendar cal = Calendar.getInstance(); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); int age = 0; try { Date dateb = sdf.parse(birthday); if(cal.before(dateb)){//還沒出生的日期 return 0; } int year = cal.get(Calendar.YEAR); int month = cal.get(Calendar.MONTH); int dayofMonth = cal.get(Calendar.DAY_OF_MONTH); cal.setTime(dateb); int birthYear = cal.get(Calendar.YEAR); int birthMonth = cal.get(Calendar.MONTH); int birthDayOfMonth = cal.get(Calendar.DAY_OF_MONTH); age = year - birthYear; if(month <= birthMonth){ if(month == birthMonth){ if(dayofMonth < birthDayOfMonth){ age--; } }else{ age--; } } } catch (ParseException e) { e.printStackTrace(); return 0; } return age; } }
希望,積累的東西可以少走點彎路。