Java基础之Calendar类

来源:互联网 时间:2016-11-08

Calendar 类是一个抽象类,它为特定瞬间与一组诸如 YEAR、MONTH、DAY_OF_MONTH、HOUR 等日历字段之间的转换提供了一些方法,并为操作日历字段(例如获得下星期的日期)提供了一些方法。瞬间可用毫秒值来表示,它是距历元(即格林威治标准时间 1970 年 1 月 1 日的 00:00:00.000,格里高利历)的偏移量。与其他语言环境敏感一样,Calendar 提供了一个类方法 getInstance,以获得此类型的一个通用的对象。Calendar的getInstance 方法返回一个Calendar对象(该对象为Calendar的子类对象),其日历字段已由当前日期和时间初始化:

Calendar rightNow = Calendar.getInstance();

源码实现:

1 public static Calendar getInstance()

2 {

3 Calendar cal = createCalendar(TimeZone.getDefaultRef(), Locale.getDefault(Locale.Category.FORMAT));

4 cal.sharedZone = true;

5 return cal;

6 }

 1 private static Calendar createCalendar(TimeZone zone,

2 Locale aLocale)

3 {

4 Calendar cal = null;

5

6 String caltype = aLocale.getUnicodeLocaleType("ca");

7 if (caltype == null) {

8 // Calendar type is not specified.

9 // If the specified locale is a Thai locale,

10 // returns a BuddhistCalendar instance.

11 if ("th".equals(aLocale.getLanguage())

12 && ("TH".equals(aLocale.getCountry()))) {

13 cal = new BuddhistCalendar(zone, aLocale);

14 } else {

15 cal = new GregorianCalendar(zone, aLocale);

16 }

17 } else if (caltype.equals("japanese")) {

18 cal = new JapaneseImperialCalendar(zone, aLocale);

19 } else if (caltype.equals("buddhist")) {

20 cal = new BuddhistCalendar(zone, aLocale);

21 } else {

22 // Unsupported calendar type.

23 // Use Gregorian calendar as a fallback.

24 cal = new GregorianCalendar(zone, aLocale);

25 }

26

27 return cal;

28 }

根据不同地区返回不同的日期子类。

下面看看Calendar常用的方法

 1 package com.test.calendar;

2

3 import java.util.Calendar;

4

5 import org.junit.Before;

6 import org.junit.Test;

7

8 public class CalendarDemo {

9 Calendar calendar = null;

10

11 @Before

12 public void test() {

13 calendar = Calendar.getInstance();

14 }

15

16 // 基本用法,获取年月日时分秒星期

17 @Test

18 public void test1() {

19 // 获取年

20 int year = calendar.get(Calendar.YEAR);

21

22 // 获取月,这里需要需要月份的范围为0~11,因此获取月份的时候需要+1才是当前月份值

23 int month = calendar.get(Calendar.MONTH) + 1;

24

25 // 获取日

26 int day = calendar.get(Calendar.DAY_OF_MONTH);

27

28 // 获取时

29 int hour = calendar.get(Calendar.HOUR);

30 // int hour = calendar.get(Calendar.HOUR_OF_DAY); // 24小时表示

31

32 // 获取分

33 int minute = calendar.get(Calendar.MINUTE);

34

35 // 获取秒

36 int second = calendar.get(Calendar.SECOND);

37

38 // 星期,英语国家星期从星期日开始计算

39 int weekday = calendar.get(Calendar.DAY_OF_WEEK);

40

41 System.out.println("现在是" + year + "年" + month + "月" + day + "日" + hour

42 + "时" + minute + "分" + second + "秒" + "星期" + weekday);

43 }

44

45 // 一年后的今天

46 @Test

47 public void test2() {

48 // 同理换成下个月的今天calendar.add(Calendar.MONTH, 1);

49 calendar.add(Calendar.YEAR, 1);

50

51 // 获取年

52 int year = calendar.get(Calendar.YEAR);

53

54 // 获取月

55 int month = calendar.get(Calendar.MONTH) + 1;

56

57 // 获取日

58 int day = calendar.get(Calendar.DAY_OF_MONTH);

59

60 System.out.println("一年后的今天:" + year + "年" + month + "月" + day + "日");

61 }

62

63 // 获取任意一个月的最后一天

64 @Test

65 public void test3() {

66 // 假设求6月的最后一天

67 int currentMonth = 6;

68 // 先求出7月份的第一天,实际中这里6为外部传递进来的currentMonth变量

69 // 1

70 calendar.set(calendar.get(Calendar.YEAR), currentMonth, 1);

71

72 calendar.add(Calendar.DATE, -1);

73

74 // 获取日

75 int day = calendar.get(Calendar.DAY_OF_MONTH);

76

77 System.out.println("6月份的最后一天为" + day + "号");

78 }

79

80 // 设置日期

81 @Test

82 public void test4() {

83 calendar.set(Calendar.YEAR, 2000);

84 System.out.println("现在是" + calendar.get(Calendar.YEAR) + "年");

85

86 calendar.set(2008, 8, 8);

87 // 获取年

88 int year = calendar.get(Calendar.YEAR);

89

90 // 获取月

91 int month = calendar.get(Calendar.MONTH);

92

93 // 获取日

94 int day = calendar.get(Calendar.DAY_OF_MONTH);

95

96 System.out.println("现在是" + year + "年" + month + "月" + day + "日");

97 }

98 }

程序输出结果:

1 现在是2016年11月7日11时42分18秒星期2

2 一年后的今天:2017年11月7日

3 6月份的最后一天为30号

4 现在是2000年

5 现在是2008年8月8日

Calendar类中也有before,after,compareTo等方法,用法与Date类的类似,只是现在推荐用Calendar类操作日期。

相关阅读:
Top