Java 之 Date 和 Calendar 實例


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

  • 注意!

    本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



     
    粤ICP备14056181号  © 2014-2020 ITdaan.com