Java 之 Date 和 Calendar 執行個體
package com.homer.learn;</p><p>import java.text.DateFormat;<br />import java.text.ParsePosition;<br />import java.text.SimpleDateFormat;<br />import java.util.Calendar;<br />import java.util.Date;<br />import java.util.GregorianCalendar;</p><p>public class TimeTest {<br />public static void main(String[] args) {<br />TimeTest tt = new TimeTest();</p><p>System.out.println("\n當前日期: ");<br />System.out.println(tt.getNowTime());// 擷取目前時間<br />System.out.println(tt.getNowTime2());// 擷取目前時間<br />System.out.println(tt.getNowTime3());// 擷取目前時間</p><p>System.out.println("\n計算周: ");<br />System.out.println(tt.getDaysOfNow2SundayInWeek());// 擷取當前日期與本周日的相差天數<br />System.out.println(tt.getDateOfMondayInWeek());// 擷取本周一的日期<br />System.out.println(tt.getDateOfSaturdayInWeek());// 擷取本周六的日期<br />System.out.println(tt.getDateOfSaturdayInNextWeek());// 擷取下周一的日期<br />System.out.println(tt.getDateOfSaturdayInLastWeek());// 擷取上周一的日期</p><p>System.out.println("\n計算月: ");<br />System.out.println(tt.getFirstDayOfMonth());// 擷取當月的第一天<br />System.out.println(tt.getLastDayOfMonth());// 擷取當月最後一天<br />System.out.println(tt.getFirstDayOfPreviousMonth());// 擷取上月第一天<br />System.out.println(tt.getLastDayOfPreviousMonth());// 擷取上月最後一天<br />System.out.println(tt.getFirstDayOfNextMonth());// 擷取下月第一天<br />System.out.println(tt.getLastDayOfNextMonth());// 擷取下月最後一天</p><p>System.out.println("\n計算年: ");<br />System.out.println(tt.getFirstDayOfYear());// 擷取本年的第一天<br />System.out.println(tt.getLastDayOfYear());// 擷取本年最後一天<br />System.out.println(tt.getFirstDayOfPreviousYear());// 擷取上年的第一天<br />System.out.println(tt.getLastDayOfPreviousYear());// 擷取上年最後一天<br />System.out.println(tt.getFirstDayOfNextYear());// 擷取下年的第一天<br />System.out.println(tt.getLastDayOfNextYear());// 擷取下年最後一天<br />System.out.println(tt.getDaysOfYear());// 擷取本年的天數</p><p>System.out.println("\n計算季度: ");<br />System.out.println(tt.getSeasonOfMonth()); // 擷取當前月的季度<br />System.out.println(tt.getLastDayOfNow());// 擷取當前天所在月份的天數<br />System.out.println(tt.isLeapYear(2012)); // 判斷是否是潤年</p><p>System.out.println("\n日期格式轉換與計算: ");<br />System.out.println(tt.getDateFromStr("2012-06-20"));// 將字串時間格式 yyyy-MM-dd,轉換成Date類型<br />System.out.println(tt.getWeek("2012-06-20"));// 根據一個日期,返回是星期幾的字串<br />System.out.print("2012-06-02 -> 2012-06-12間隔天數:");// 計算兩個日期間的間隔天數<br />System.out.println(tt.getDaysFromTwoDate("2012-06-02", "2012-06-12"));<br />}</p><p>// 擷取目前時間<br />public String getNowTime() {<br />SimpleDateFormat sDateFormat = new SimpleDateFormat("yyyy-MM-dd");</p><p>Date now = new Date();<br />return sDateFormat.format(now);<br />}</p><p>public String getNowTime2() {<br />SimpleDateFormat sDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");</p><p>Date now = new Date(System.currentTimeMillis());<br />return sDateFormat.format(now);<br />}</p><p>public String getNowTime3() {<br />StringBuilder strBuildNow = new StringBuilder();</p><p>Calendar calendar = Calendar.getInstance();<br />int year = calendar.get(Calendar.YEAR);<br />int month = calendar.get(Calendar.MONTH) + 1;<br />int day = calendar.get(Calendar.DAY_OF_MONTH);<br />int hour = calendar.get(Calendar.HOUR_OF_DAY);<br />int minute = calendar.get(Calendar.MINUTE);<br />int second = calendar.get(Calendar.SECOND);<br />int millissecond = calendar.get(Calendar.MILLISECOND);</p><p>strBuildNow.append(year + "-");<br />strBuildNow.append(month + "-");<br />strBuildNow.append(day + " ");<br />strBuildNow.append(hour + ":");<br />strBuildNow.append(minute + ":");<br />strBuildNow.append(second + ".");<br />strBuildNow.append(millissecond);</p><p>return strBuildNow.toString();<br />}</p><p>// 擷取當前日期與本周日的相差天數<br />public int getDaysOfNow2SundayInWeek() {<br />Calendar calendar = Calendar.getInstance();</p><p>int dayOfWeek = calendar.get(Calendar.DAY_OF_WEEK) - 1;// 減一天,周一為1,符合中國人習慣。Sunday - 1; Monday - 2; Saturday - 7<br />if(dayOfWeek == 0) {// 周日<br />return 0;<br />} else {<br />return 0 - dayOfWeek;<br />}<br />}</p><p>// 擷取本周一的日期<br />public String getDateOfMondayInWeek(){<br />int day = this.getDaysOfNow2SundayInWeek() + 1;// 加1,即周一離本周日的間隔天數<br />GregorianCalendar gCalendar = new GregorianCalendar();</p><p>gCalendar.add(GregorianCalendar.DATE, day);// 計算與本周一相差的時間間隔<br />Date curDay = gCalendar.getTime();</p><p>DateFormat dateFormat = DateFormat.getInstance();<br />String dateOfMonday = dateFormat.format(curDay);</p><p>return dateOfMonday;<br />}</p><p>// 擷取本周六的日期<br />public String getDateOfSaturdayInWeek(){<br />int day = this.getDaysOfNow2SundayInWeek() + 6;// 加6,即周六離本周日的間隔天數<br />GregorianCalendar gCalendar = new GregorianCalendar();</p><p>gCalendar.add(GregorianCalendar.DATE, day);// 計算與本周六相差的時間間隔<br />Date curDay = gCalendar.getTime();</p><p>DateFormat dateFormat = DateFormat.getInstance();<br />String dateOfMonday = dateFormat.format(curDay);</p><p>return dateOfMonday;<br />}</p><p>// 擷取上周一的日期<br />public String getDateOfSaturdayInLastWeek(){<br />int day = this.getDaysOfNow2SundayInWeek() - 1;// 減1,即上周一離本周日的間隔天數<br />GregorianCalendar gCalendar = new GregorianCalendar();</p><p>gCalendar.add(GregorianCalendar.DATE, day);// 計算與上周一相差的時間間隔<br />Date curDay = gCalendar.getTime();</p><p>DateFormat dateFormat = DateFormat.getInstance();<br />String dateOfMonday = dateFormat.format(curDay);</p><p>return dateOfMonday;<br />}</p><p>// 擷取下周一的日期<br />public String getDateOfSaturdayInNextWeek(){<br />int day = this.getDaysOfNow2SundayInWeek() + 8;// 加8,即下周一離本周日的間隔天數<br />GregorianCalendar gCalendar = new GregorianCalendar();</p><p>gCalendar.add(GregorianCalendar.DATE, day);// 計算與下周一相差的時間間隔<br />Date curDay = gCalendar.getTime();</p><p>DateFormat dateFormat = DateFormat.getInstance();<br />String dateOfMonday = dateFormat.format(curDay);</p><p>return dateOfMonday;<br />}</p><p>// 擷取當月第一天<br />public String getFirstDayOfMonth() {<br />String strFirstDay = "";<br />SimpleDateFormat sDateFormat = new SimpleDateFormat("yyyy-MM-dd");</p><p>Calendar calendar = Calendar.getInstance();<br />calendar.set(Calendar.DATE, 1);// 設定當前月的1號</p><p>strFirstDay = sDateFormat.format(calendar.getTime());<br />return strFirstDay;<br />}</p><p>// 擷取當月最後一天<br />public String getLastDayOfMonth() {<br />String strLastDay = "";<br />SimpleDateFormat sDateFormat = new SimpleDateFormat("yyyy-MM-dd");</p><p>Calendar calendar = Calendar.getInstance();<br />calendar.set(Calendar.DATE, 1);// 設定當前月的1號<br />calendar.add(Calendar.MONDAY, 1);// 加一個月,變為下月的1號<br />calendar.add(Calendar.DATE, -1);// 減去一天,變為當前月的最後一天</p><p>strLastDay = sDateFormat.format(calendar.getTime());<br />return strLastDay;<br />}</p><p>// 擷取上月第一天<br />public String getFirstDayOfPreviousMonth() {<br />String strFirstDay = "";<br />SimpleDateFormat sDateFormat = new SimpleDateFormat("yyyy-MM-dd");</p><p>Calendar calendar = Calendar.getInstance();<br />calendar.set(Calendar.DATE, 1);// 設定當前月的1號<br />calendar.add(Calendar.MONDAY, -1);// 減一個月,變為上月的1號</p><p>strFirstDay = sDateFormat.format(calendar.getTime());<br />return strFirstDay;<br />}</p><p>// 擷取上月最後一天<br />public String getLastDayOfPreviousMonth() {<br />String strLastDay = "";<br />SimpleDateFormat sDateFormat = new SimpleDateFormat("yyyy-MM-dd");</p><p>Calendar calendar = Calendar.getInstance();<br />calendar.set(Calendar.DATE, 1);// 設定當前月的1號<br />calendar.add(Calendar.DATE, -1);// 減一天,變為上月的1號</p><p>strLastDay = sDateFormat.format(calendar.getTime());<br />return strLastDay;<br />}</p><p>public String getLastDayOfPreviousMonth2() {<br />String strLastDay = "";<br />SimpleDateFormat sDateFormat = new SimpleDateFormat("yyyy-MM-dd");</p><p>Calendar calendar = Calendar.getInstance();<br />calendar.add(Calendar.MONDAY, -1);// 減一個月<br />calendar.set(Calendar.DATE, 1);// 設定當前月的1號<br />calendar.roll(Calendar.DATE, -1);// 把日期復原一天,也就是本月最後一天</p><p>strLastDay = sDateFormat.format(calendar.getTime());<br />return strLastDay;<br />}</p><p>// 擷取下月第一天<br />public String getFirstDayOfNextMonth() {<br />String strFirstDay = "";<br />SimpleDateFormat sDateFormat = new SimpleDateFormat("yyyy-MM-dd");</p><p>Calendar calendar = Calendar.getInstance();<br />calendar.add(Calendar.MONTH, 1);// 加一個月<br />calendar.set(Calendar.DATE, 1);// 設定當前月第一天</p><p>strFirstDay = sDateFormat.format(calendar.getTime());<br />return strFirstDay;<br />}</p><p>// 擷取下月最後一天<br />public String getLastDayOfNextMonth() {<br />String strLastDay = "";<br />SimpleDateFormat sDateFormat = new SimpleDateFormat("yyyy-MM-dd");</p><p>Calendar calendar = Calendar.getInstance();<br />calendar.set(Calendar.DATE, 1);// 設定當前月的1號<br />calendar.add(Calendar.MONDAY, 2);// 加兩個月,變為下下月的1號<br />calendar.add(Calendar.DATE, -1);// 減一天,變為下月的最後一天</p><p>strLastDay = sDateFormat.format(calendar.getTime());<br />return strLastDay;<br />}</p><p>public String getLastDayOfNextMonth2(){<br />String strLastDay = "";<br />SimpleDateFormat sDateFormat = new SimpleDateFormat("yyyy-MM-dd");</p><p>Calendar calendar = Calendar.getInstance();<br />calendar.add(Calendar.MONTH, 1);// 加1個月<br />calendar.set(Calendar.DATE, 1);// 把日期設定為當月第1天<br />calendar.roll(Calendar.DATE, -1);// 日期復原1天,也就是本月最後1天</p><p>strLastDay = sDateFormat.format(calendar.getTime());<br />return strLastDay;<br />}</p><p>// 擷取本年的第一天<br />public String getFirstDayOfYear(){<br />String strFirstDay = "";<br />SimpleDateFormat sDateFormat = new SimpleDateFormat("yyyy-MM-dd");</p><p>Calendar calendar = Calendar.getInstance();<br />calendar.set(Calendar.DAY_OF_YEAR, 1);// 設定當年第一天</p><p>strFirstDay = sDateFormat.format(calendar.getTime());<br />return strFirstDay;<br />}</p><p>// 擷取本年的最後一天<br />public String getLastDayOfYear(){<br />String strLastDay = "";</p><p>Calendar calendar = Calendar.getInstance();<br />strLastDay = calendar.get(Calendar.YEAR) + "-12-31";</p><p>return strLastDay;<br />}</p><p>// 擷取上年的第一天<br />public String getFirstDayOfPreviousYear(){<br />String strFirstDay = "";</p><p>Calendar calendar = Calendar.getInstance();<br />strFirstDay = (calendar.get(Calendar.YEAR) - 1) + "-01-01";</p><p>return strFirstDay;<br />}</p><p>// 擷取上年的最後一天<br />public String getLastDayOfPreviousYear(){<br />String strLastDay = "";</p><p>Calendar calendar = Calendar.getInstance();<br />strLastDay = (calendar.get(Calendar.YEAR) - 1) + "-12-31";</p><p>return strLastDay;<br />}</p><p>// 擷取下年的第一天<br />public String getFirstDayOfNextYear(){<br />String strFirstDay = "";<br />SimpleDateFormat sDateFormat = new SimpleDateFormat("yyyy-MM-dd");</p><p>Calendar calendar = Calendar.getInstance();<br />calendar.add(Calendar.YEAR, 1);// 加一年<br />calendar.set(Calendar.DAY_OF_YEAR, 1);// 設定當年第一天</p><p>strFirstDay = sDateFormat.format(calendar.getTime());<br />return strFirstDay;<br />}</p><p>// 擷取下年的最後一天<br />public String getLastDayOfNextYear(){<br />String strLastDay = "";<br />SimpleDateFormat sDateFormat = new SimpleDateFormat("yyyy-MM-dd");</p><p>Calendar calendar = Calendar.getInstance();<br />calendar.add(Calendar.YEAR, 1);// 加一年<br />calendar.set(Calendar.DAY_OF_YEAR, 1);// 設定當年第一天<br />calendar.roll(Calendar.DAY_OF_YEAR, -1);// 復原到當年最後一天</p><p>strLastDay = sDateFormat.format(calendar.getTime());<br />return strLastDay;<br />}</p><p>// 擷取本年的天數<br />public String getDaysOfYear(){<br />int year = 0;<br />int days = 0;</p><p>Calendar calendar = Calendar.getInstance();<br />calendar.set(Calendar.DAY_OF_YEAR, 1);// 設定日期為當年第一天<br />calendar.roll(Calendar.DAY_OF_YEAR, -1);// 把日期復原一天</p><p>year = calendar.get(Calendar.YEAR);<br />days = calendar.get(Calendar.DAY_OF_YEAR);</p><p>return (days + " in " + year);<br />}</p><p>// 擷取當前月的季度<br />public String getSeasonOfMonth(){<br />String strSeason = "";<br />int year, month, day;<br />int season = 1;<br />int array[][] = new int[][]{ {1,2,3}, {4,5,6}, {7,8,9}, {10,11,12} };</p><p>Calendar calendar = Calendar.getInstance();<br />year = calendar.get(Calendar.YEAR);<br />month = calendar.get(Calendar.MONDAY) + 1;<br />day = calendar.get(Calendar.DAY_OF_MONTH);<br />switch (month) {<br />case 1:<br />case 2:<br />case 3:<br />season = 1;<br />break;<br />case 4:<br />case 5:<br />case 6:<br />season = 2;<br />break;<br />case 7:<br />case 8:<br />case 9:<br />season = 3;<br />break;<br />case 10:<br />case 11:<br />case 12:<br />season = 4;<br />break;<br />default:<br />season = 1;<br />break;<br />}</p><p>int start_month = array[season-1][0];<br />int end_month = array[season-1][2];<br />strSeason = year + "-" + month + "-" +day;<br />strSeason += " in [ " + year + "-" + start_month + " : " + year + "-" + end_month + " ]";</p><p>return strSeason;<br />}</p><p>// 擷取當前天所在月份的天數<br />public String getLastDayOfNow(){<br />String strLastDay = "";<br />int year, month, day;<br />int days = 0;</p><p>Calendar calendar = Calendar.getInstance();<br />year = calendar.get(Calendar.YEAR);<br />month = calendar.get(Calendar.MONTH) + 1;<br />day = calendar.get(Calendar.DAY_OF_MONTH);</p><p>switch (month) {<br />case 1:<br />case 3:<br />case 5:<br />case 7:<br />case 8:<br />case 10:<br />case 12:<br />days = 31;<br />break;<br />case 4:<br />case 6:<br />case 9:<br />case 11:<br />days = 30;<br />break;<br />case 2:<br />if (isLeapYear(year)) {<br />days = 29;<br />} else {<br />days = 28;<br />}<br />break;<br />default:<br />days = 0;<br />break;<br />}</p><p>strLastDay = days + " in [ " + year + "-" + month + "-" + day + " ]";<br />return strLastDay;<br />}</p><p>// 判斷是否是潤年<br />public boolean isLeapYear(int year){<br />return (year%4 == 0 && year%100 != 0) || (year%400 == 0);<br />}</p><p>// 將字串時間格式 yyyy-MM-dd,轉換成Date類型<br />public Date getDateFromStr(String txtDate) {<br />SimpleDateFormat sDateFormat = new SimpleDateFormat("yyyy-MM-dd");<br />ParsePosition pos = new ParsePosition(0);<br />Date date = sDateFormat.parse(txtDate, pos);</p><p>return date;<br />}</p><p>// 根據一個日期,返回是星期幾的字串<br />public String getWeek(String txtDate) {<br />Date date = getDateFromStr(txtDate);<br />Calendar calendar = Calendar.getInstance();</p><p>calendar.setTime(date);<br />String week = new SimpleDateFormat("EEEE").format(date);</p><p>return week;<br />}</p><p>// 計算兩個日期間的間隔天數<br />public long getDaysFromTwoDate(String txtDate1, String txtDate2) {<br />if(txtDate1 == null || txtDate1.equals("")) {<br />return 0;<br />}<br />if(txtDate2 == null || txtDate2.equals("")) {<br />return 0;<br />}</p><p>SimpleDateFormat sDateFormat = new SimpleDateFormat("yyyy-MM-dd");<br />long days = 0;<br />try {<br />Date date1 = sDateFormat.parse(txtDate1);<br />Date date2 = sDateFormat.parse(txtDate2);<br />days = (date2.getTime() - date1.getTime())/(24*60*60*1000);// 通過getTime()方法,把時間Date轉換成毫秒格式Long類型,進行計算<br />} catch (Exception e) {<br />System.out.println(e.getMessage());<br />}</p><p>return days;<br />}</p><p>}<br />
運行結果:
當前日期:
2012-03-07
2012-03-07 12:30:11
2012-3-7 12:30:11.101
計算周:
-3
3/5/12 12:30 PM
3/10/12 12:30 PM
3/12/12 12:30 PM
3/3/12 12:30 PM
計算月:
2012-03-01
2012-03-31
2012-02-01
2012-02-29
2012-04-01
2012-04-30
計算年:
2012-01-01
2012-12-31
2011-01-01
2011-12-31
2013-01-01
2013-12-31
366 in 2012
計算季度:
2012-3-7 in [ 2012-1 : 2012-3 ]
31 in [ 2012-3-7 ]
true
日期格式轉換與計算:
Wed Jun 20 00:00:00 CST 2012
Wednesday
2012-06-02 -> 2012-06-12間隔天數:10
源碼下載
參考推薦:
Java 之 Date 和 Calendar