Java基礎-Calendar類常用方法介紹


                  Java基礎-Calendar類常用方法介紹

                                    作者:尹正傑

版權聲明:原創作品,謝絕轉載!否則將追究法律責任。

 

 

 

 

一.Calendar類概念

  Calendar 類是一個抽象類,它為特定瞬間與一組諸如 YEARMONTHDAY_OF_MONTHHOUR日歷字段之間的轉換提供了一些方法,並為操作日歷字段(例如獲得下星期的日期)提供了一些方法。瞬間可用毫秒值來表示,它是距歷元(即格林威治標准時間 1970 年 1 月 1 日的 00:00:00.000,格里高利歷)的偏移量。  

  Calemdar類寫了靜態方法getInstance() 可以直接返回子類的對象,不需要直接new 子類的對象,通過靜態方法直接獲取。

 

二.Calendar類常用方法

1>.getInstance 

  與其他語言環境敏感類一樣,Calendar 提供了一個類方法 getInstance,以獲得此類型的一個通用的對象。CalendargetInstance 方法返回一個 Calendar 對象,其日歷字段已由當前日期和時間初始化:

 1 /*
 2 @author :yinzhengjie
 3 Blog:http://www.cnblogs.com/yinzhengjie/tag/Java%E5%9F%BA%E7%A1%80/
 4 EMAIL:y1053419035@qq.com
 5 */
 6 
 7 package cn.org.yinzhengjie.Demo;
 8 
 9 import java.util.Calendar;
10 
11 public class CalendarDemo {
12     public static void main(String[] args) {
13         Calendar c = Calendar.getInstance();
14         System.out.println(c);
15     }
16 }
17 
18 
19 /*
20  以上代碼執行結果如下:
21  java.util.GregorianCalendar[time=1524043662523,areFieldsSet=true,areAllFieldsSet=true,lenient=true,zone=sun.util.calendar.ZoneInfo[id="GMT+08:00",offset=28800000,dstSavings=0,useDaylight=false,transitions=0,lastRule=null],firstDayOfWeek=1,minimalDaysInFirstWeek=1,ERA=1,YEAR=2018,MONTH=3,WEEK_OF_YEAR=16,WEEK_OF_MONTH=3,DAY_OF_MONTH=18,DAY_OF_YEAR=108,DAY_OF_WEEK=4,DAY_OF_WEEK_IN_MONTH=3,AM_PM=1,HOUR=5,HOUR_OF_DAY=17,MINUTE=27,SECOND=42,MILLISECOND=523,ZONE_OFFSET=28800000,DST_OFFSET=0]
22  */

2>.get方法

  Calendar類的get方法,用於獲取日歷字段的值,返回值的結果也是個int類型的值。

 1 /*
 2 @author :yinzhengjie
 3 Blog:http://www.cnblogs.com/yinzhengjie/tag/Java%E5%9F%BA%E7%A1%80/
 4 EMAIL:y1053419035@qq.com
 5 */
 6 
 7 package cn.org.yinzhengjie.Demo;
 8 
 9 import java.util.Calendar;
10 
11 public class CalendarDemo {
12     public static void main(String[] args) {
13         Calendar c = Calendar.getInstance();
14         //獲取年份
15         int year = c.get(Calendar.YEAR);
16         //獲取月份(月份是從0開始計數的,因此我們有必要+1)
17         int mouth = c.get(Calendar.MONTH);
18         //獲取天數
19         int day = c.get(Calendar.DAY_OF_MONTH);
20         System.out.printf("%d年%d月%d日",year,mouth+1,day);
21         
22     }
23 }
24 
25 /*
26 以上代碼執行結果如下:
27 2018年4月18日
28 */

3>.set方法

  將給定的日歷字段設置為給定值。

 1 /*
 2 @author :yinzhengjie
 3 Blog:http://www.cnblogs.com/yinzhengjie/tag/Java%E5%9F%BA%E7%A1%80/
 4 EMAIL:y1053419035@qq.com
 5 */
 6 
 7 package cn.org.yinzhengjie.Demo;
 8 
 9 import java.util.Calendar;
10 
11 public class CalendarDemo {
12     public static void main(String[] args) {
13         Calendar c = Calendar.getInstance();
14         //設置月份,設置10月份(月份是以0開始計數的喲!)
15         c.set(Calendar.MONTH, 10);
16         //設置年,月,日
17         c.set(2099, 4, 19);
18         
19         
20          //獲取年份
21         int year = c.get(Calendar.YEAR);
22         //獲取月份(月份是從0開始計數的,因此我們有必要+1)
23         int mouth = c.get(Calendar.MONTH);
24         //獲取天數
25         int day = c.get(Calendar.DAY_OF_MONTH);
26         System.out.printf("%d年%d月%d日",year,mouth+1,day);
27         
28     }
29 }
30 
31 /*
32 以上代碼執行結果如下:
33 2099年5月19日
34 */

4>.add方法

  日歷的偏移量,可以指定一個日歷中的字段,進行整數的偏移。

 1 /*
 2 @author :yinzhengjie
 3 Blog:http://www.cnblogs.com/yinzhengjie/tag/Java%E5%9F%BA%E7%A1%80/
 4 EMAIL:y1053419035@qq.com
 5 */
 6 
 7 package cn.org.yinzhengjie.Demo;
 8 
 9 import java.util.Calendar;
10 
11 public class CalendarDemo {
12     public static void main(String[] args) {
13         Calendar c = Calendar.getInstance();
14         //獲取到天數后,如果是負數就向前偏移,如果是正數就向后偏移,此處是獲取到當月天數后,會在當前月份的偏移接近10個月)
15         c.add(Calendar.DAY_OF_MONTH, -280);
16          //獲取年份
17         int year = c.get(Calendar.YEAR);
18         //獲取月份(月份是從0開始計數的,因此我們有必要+1)
19         int mouth = c.get(Calendar.MONTH);
20         //獲取天數
21         int day = c.get(Calendar.DAY_OF_MONTH);
22         System.out.printf("%d年%d月%d日\n",year,mouth+1,day);     
23     }
24 }
25 
26 /*
27 以上代碼執行結果如下:
28 2017年7月12日
29 */

5>.getTime方法

  把日歷對象轉換成Date日期對象。

 1 /*
 2 @author :yinzhengjie
 3 Blog:http://www.cnblogs.com/yinzhengjie/tag/Java%E5%9F%BA%E7%A1%80/
 4 EMAIL:y1053419035@qq.com
 5 */
 6 
 7 package cn.org.yinzhengjie.Demo;
 8 
 9 import java.util.Calendar;
10 import java.util.Date;
11 
12 public class CalendarDemo {
13     public static void main(String[] args) {
14         Calendar c = Calendar.getInstance();
15         Date date = c.getTime();
16         System.out.println(date);
17     }
18 }
19 
20 /*
21 以上代碼執行結果如下:
22 Wed Apr 18 17:54:17 GMT+08:00 2018
23 */

 

三.小試牛刀

1>.求出自己已經出生多少天

 1 /*
 2 @author :yinzhengjie
 3 Blog:http://www.cnblogs.com/yinzhengjie/tag/Java%E5%9F%BA%E7%A1%80/
 4 EMAIL:y1053419035@qq.com
 5 */
 6 
 7 package cn.org.yinzhengjie.Demo;
 8 
 9 import java.text.ParseException;
10 import java.text.SimpleDateFormat;
11 import java.util.Date;
12 import java.util.Scanner;
13 
14 public class DateDemo {
15 
16     public static void main(String[] args) throws ParseException {
17         function();
18     }
19     
20     public static void function() throws ParseException {
21         //獲取出生日期,從鍵盤輸入
22         while(true) {
23             System.out.print("請輸入你的出生日期(格式:yyyy-MM-dd):>>>");
24             String birthdayString = new Scanner(System.in).nextLine();
25             if(birthdayString.equals("exit")) {
26                 System.exit(0);
27             }
28             //創建SimpleDateFormat對象,並傳入日期格式
29             SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
30             //將字符串日期,轉成Date對象,需要調用parse方法。
31             Date  birthdayDate = sdf.parse(birthdayString);
32             //獲取今天的日期對象
33             Date todayDate = new Date();
34             //將兩個日期轉換成毫秒值,Date類的方法getTime
35             long birthdaySecond = birthdayDate.getTime();
36             long todaySecond = todayDate.getTime();
37             long day = (todaySecond - birthdaySecond)/1000/3600/24;
38             if(day<0) {
39                 System.out.println("你還沒有出生呢!");
40             }else {
41                 System.out.println("你已經出生了:"+day+" 天啦!");
42             }
43         }
44         
45     }
46 }

  以上代碼測試情況如下:

2.計算閏年

 1 /*
 2 @author :yinzhengjie
 3 Blog:http://www.cnblogs.com/yinzhengjie/tag/Java%E5%9F%BA%E7%A1%80/
 4 EMAIL:y1053419035@qq.com
 5 */
 6 
 7 package cn.org.yinzhengjie.Demo;
 8 
 9 import java.text.ParseException;
10 import java.util.Calendar;
11 import java.util.Scanner;
12 import java.util.regex.Pattern;
13 
14 public class DateDemo {
15 
16     public static void main(String[] args) throws ParseException {
17         Pattern pattern = Pattern.compile("^[-\\+]?[\\d]*$");  
18         while(true) {
19             System.out.print("請輸入你想要計算的年份(格式:YYYY)\":>>>");
20             String input = new Scanner(System.in).nextLine();
21             if(input.length() == 0) {    //判斷用戶輸入的是否為整數。 
22                 continue;
23             }else if(input.equals("exit")) {
24                 System.exit(0);
25             }else if(pattern.matcher(input).matches()) {
26                 int year = Integer.valueOf(input).intValue();
27                 function(year);
28             }else {
29                 System.out.println("請輸入年份(格式:YYYY)");
30             }
31             
32         }
33     }
34     
35     public static void function(int year) throws ParseException {
36         Calendar c = Calendar.getInstance();
37         //將日歷設置到指定年的3月1日
38         c.set(year, 2,1);
39         //日歷add方法,向前偏移1天
40         c.add(Calendar.DAY_OF_MONTH, -1);
41         //get方法獲取天數
42         int day = c.get(Calendar.DAY_OF_MONTH);
43         if(day == 29) {
44             System.out.printf("%d年的二月份有%d天,是閏年!\n",year,day);
45         }else {
46             System.out.printf("%d年的二月份有%d天,是平年!\n",year,day);
47         }
48     }
49 }

  以上代碼測試結果如下:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM