2個比較常用的時間Java工具類
例如取得10天后的日期、當前月所在第幾季度等,為此我整理了2個很好用的工具類,代碼如下
1.求X天后的日期
import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; public class Datetest {/** * * @param datestr 日期字符串 * @param day 相對天數,為正數表示之后,為負數表示之前 * @return 指定日期字符串n天之前或者之后的日期 */ public static String getBeforeAfterDate(String datestr, int day) { SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd"); Date olddate = null; try { df.setLenient(false); olddate = new Date(df.parse(datestr).getTime()); } catch (ParseException e) { throw new RuntimeException("日期轉換錯誤"); } Calendar cal = Calendar.getInstance(); cal.setTime(olddate); int Year = cal.get(Calendar.YEAR); int Month = cal.get(Calendar.MONTH); int Day = cal.get(Calendar.DAY_OF_MONTH); int NewDay = Day + day; cal.set(Calendar.YEAR, Year); cal.set(Calendar.MONTH, Month); cal.set(Calendar.DAY_OF_MONTH, NewDay); return df.format(cal.getTimeInMillis()); } public static void main(String[] args) { System.out.println(getBeforeAfterDate("2013-12-29",10)); //獲取2013-12-29之后10天的日期 }
}</pre>2.有關季度日期的算法
import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; /** * * @author px * @date 2010-04-26 * */ public class DateUtils { // private static final Log logger = LogFactory.getLog(DateUtils.class); public static final String YYYYMMDD = "yyyy-MM-dd"; public static final String YYYYMMDD_ZH = "yyyy年MM月dd日"; public static final int FIRST_DAY_OF_WEEK = Calendar.MONDAY; //中國周一是一周的第一天 /** * * @param strDate * @return */ public static Date parseDate(String strDate) { return parseDate(strDate, null); } /** * parseDate * * @param strDate * @param pattern * @return */ public static Date parseDate(String strDate, String pattern) { Date date = null; try { if(pattern == null) { pattern = YYYYMMDD; } SimpleDateFormat format = new SimpleDateFormat(pattern); date = format.parse(strDate); } catch (Exception e) { e.printStackTrace(); } return date; } /** * format date * * @param date * @return */ public static String formatDate(Date date) { return formatDate(date, null); } /** * format date * * @param date * @param pattern * @return */ public static String formatDate(Date date, String pattern) { String strDate = null; try { if(pattern == null) { pattern = YYYYMMDD; } SimpleDateFormat format = new SimpleDateFormat(pattern); strDate = format.format(date); } catch (Exception e) { e.printStackTrace(); } return strDate; } /** * 取得一年的第幾周 * * @param date * @return */ public static int getWeekOfYear(Date date){ Calendar c = Calendar.getInstance(); c.setTime(date); int week_of_year = c.get(Calendar.WEEK_OF_YEAR); return week_of_year - 1; } /** * getWeekBeginAndEndDate * * @param date * @param pattern * @return */ public static String getWeekBeginAndEndDate(Date date, String pattern){ Date monday = getMondayOfWeek(date); Date sunday = getSundayOfWeek(date); return formatDate(monday, pattern) + " - " + formatDate(sunday, pattern) ; } /** * 根據日期取得對應周周一日期 * * @param date * @return */ public static Date getMondayOfWeek(Date date) { Calendar monday = Calendar.getInstance(); monday.setTime(date); monday.setFirstDayOfWeek(FIRST_DAY_OF_WEEK); monday.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY); return monday.getTime(); } /** * 根據日期取得對應周周日日期 * * @param date * @return */ public static Date getSundayOfWeek(Date date) { Calendar sunday = Calendar.getInstance(); sunday.setTime(date); sunday.setFirstDayOfWeek(FIRST_DAY_OF_WEEK); sunday.set(Calendar.DAY_OF_WEEK, Calendar.SUNDAY); return sunday.getTime(); } /** * 取得月的剩余天數 * * @param date * @return */ public static int getRemainDayOfMonth(Date date) { int dayOfMonth = getDayOfMonth(date); int day = getPassDayOfMonth(date); return dayOfMonth - day; } /** * 取得月已經過的天數 * * @param date * @return */ public static int getPassDayOfMonth(Date date) { Calendar c = Calendar.getInstance(); c.setTime(date); return c.get(Calendar.DAY_OF_MONTH); } /** * 取得月天數 * * @param date * @return */ public static int getDayOfMonth(Date date) { Calendar c = Calendar.getInstance(); c.setTime(date); return c.getActualMaximum(Calendar.DAY_OF_MONTH); } /** * 取得月第一天 * * @param date * @return */ public static Date getFirstDateOfMonth(Date date) { Calendar c = Calendar.getInstance(); c.setTime(date); c.set(Calendar.DAY_OF_MONTH, c.getActualMinimum(Calendar.DAY_OF_MONTH)); return c.getTime(); } /** * 取得月最后一天 * * @param date * @return */ public static Date getLastDateOfMonth(Date date) { Calendar c = Calendar.getInstance(); c.setTime(date); c.set(Calendar.DAY_OF_MONTH, c.getActualMaximum(Calendar.DAY_OF_MONTH)); return c.getTime(); } /** * 取得季度第一天 * * @param date * @return */ public static Date getFirstDateOfSeason(Date date) { return getFirstDateOfMonth(getSeasonDate(date)[0]); } /** * 取得季度最后一天 * * @param date * @return */ public static Date getLastDateOfSeason(Date date) { return getLastDateOfMonth(getSeasonDate(date)[2]); } /** * 取得季度天數 * @param date * @return */ public static int getDayOfSeason(Date date) { int day = 0; Date[] seasonDates = getSeasonDate(date); for (Date date2 : seasonDates) { day += getDayOfMonth(date2); } return day; } /** * 取得季度剩余天數 * * @param date * @return */ public static int getRemainDayOfSeason(Date date) { return getDayOfSeason(date) - getPassDayOfSeason(date); } /** * 取得季度已過天數 * * @param date * @return */ public static int getPassDayOfSeason(Date date) { int day = 0; Date[] seasonDates = getSeasonDate(date); Calendar c = Calendar.getInstance(); c.setTime(date); int month = c.get(Calendar.MONTH); <PRE class=java name="code"> //季度第一個月 if(month == Calendar.JANUARY || month == Calendar.APRIL || month == Calendar.JULY || month == Calendar.OCTOBER) { day = getPassDayOfMonth(seasonDates[0]); } else if(month == Calendar.FEBRUARY || month == Calendar.MAY || month == Calendar.AUGUST || month == Calendar.NOVEMBER) { //季度第二個月 day = getDayOfMonth(seasonDates[0]) + getPassDayOfMonth(seasonDates[1]); } else if(month == Calendar.MARCH || month == Calendar.JUNE || month == Calendar.SEPTEMBER || month == Calendar.DECEMBER) { //季度第三個月 day = getDayOfMonth(seasonDates[0]) + getDayOfMonth(seasonDates[1]) + getPassDayOfMonth(seasonDates[2]); } return day; } /** * 取得季度月 * * @param date * @return */ public static Date[] getSeasonDate(Date date) { Date[] season = new Date[3]; Calendar c = Calendar.getInstance(); c.setTime(date); int nSeason = getSeason(date); if(nSeason == 1) {//第一季度 c.set(Calendar.MONTH, Calendar.JANUARY); season[0] = c.getTime(); c.set(Calendar.MONTH, Calendar.FEBRUARY); season[1] = c.getTime(); c.set(Calendar.MONTH, Calendar.MARCH); season[2] = c.getTime(); } else if(nSeason == 2) {//第二季度 c.set(Calendar.MONTH, Calendar.APRIL); season[0] = c.getTime(); c.set(Calendar.MONTH, Calendar.MAY); season[1] = c.getTime(); c.set(Calendar.MONTH, Calendar.JUNE); season[2] = c.getTime(); } else if(nSeason == 3) {//第三季度 c.set(Calendar.MONTH, Calendar.JULY); season[0] = c.getTime(); c.set(Calendar.MONTH, Calendar.AUGUST); season[1] = c.getTime(); c.set(Calendar.MONTH, Calendar.SEPTEMBER); season[2] = c.getTime(); } else if(nSeason == 4) {//第四季度 c.set(Calendar.MONTH, Calendar.OCTOBER); season[0] = c.getTime(); c.set(Calendar.MONTH, Calendar.NOVEMBER); season[1] = c.getTime(); c.set(Calendar.MONTH, Calendar.DECEMBER); season[2] = c.getTime(); } return season; } /** * * 1 第一季度 2 第二季度 3 第三季度 4 第四季度 * * @param date * @return */ public static int getSeason(Date date) { int season = 0; Calendar c = Calendar.getInstance(); c.setTime(date); int month = c.get(Calendar.MONTH); switch (month) { case Calendar.JANUARY: case Calendar.FEBRUARY: case Calendar.MARCH: season = 1; break; case Calendar.APRIL: case Calendar.MAY: case Calendar.JUNE: season = 2; break; case Calendar.JULY: case Calendar.AUGUST: case Calendar.SEPTEMBER: season = 3; break; case Calendar.OCTOBER: case Calendar.NOVEMBER: case Calendar.DECEMBER: season = 4; break; default: break; } return season; } public static void main(String[] args) { String strDate = "2010-03-26"; Date date = parseDate(strDate); System.out.println(strDate + " 是一年的第幾周?" + getWeekOfYear(date)); System.out.println(strDate + " 所在周起始結束日期?" + getWeekBeginAndEndDate(date, "yyyy年MM月dd日")); System.out.println(strDate + " 所在周周一是?" + formatDate(getMondayOfWeek(date))); System.out.println(strDate + " 所在周周日是?" + formatDate(getSundayOfWeek(date))); System.out.println(strDate + " 當月第一天日期?" + formatDate(getFirstDateOfMonth(date))); System.out.println(strDate + " 當月最后一天日期?" + formatDate(getLastDateOfMonth(date))); System.out.println(strDate + " 當月天數?" + getDayOfMonth(date)); System.out.println(strDate + " 當月已過多少天?" + getPassDayOfMonth(date)); System.out.println(strDate + " 當月剩余多少天?" + getRemainDayOfMonth(date)); System.out.println(strDate + " 所在季度第一天日期?" + formatDate(getFirstDateOfSeason(date))); System.out.println(strDate + " 所在季度最后一天日期?" + formatDate(getLastDateOfSeason(date))); System.out.println(strDate + " 所在季度天數?" + getDayOfSeason(date)); System.out.println(strDate + " 所在季度已過多少天?" + getPassDayOfSeason(date)); System.out.println(strDate + " 所在季度剩余多少天?" + getRemainDayOfSeason(date)); System.out.println(strDate + " 是第幾季度?" + getSeason(date)); System.out.println(strDate + " 所在季度月份?" + formatDate(getSeasonDate(date)[0], "yyyy年MM月") + "/" + formatDate(getSeasonDate(date)[1], "yyyy年MM月") + "/" + formatDate(getSeasonDate(date)[2], "yyyy年MM月")); } }
本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!