java日历教程_JAVA Calendar方法使用基础教程详解

究竟什么是一个 Calendar 呢?中文的翻译就是日历,那我们立刻可以想到我们生活中有阳(公)历、阴(农)历之分。它们的区别在哪呢?

比如有:

月份的定义 – 阳`(公)历 一年12 个月,每个月的天数各不同;阴(农)历,每个月固定28天

每周的第一天 – 阳(公)历星期日是第一天;阴(农)历,星期一是第一天

Calendar 在 Java 中是一个抽象类(Abstract Class),GregorianCalendar 是它的一个具体实现。我们从 Calendar.getInstance() 中所获得的实例就是一个 “GreogrianCalendar” 对象(与您通过 new GregorianCalendar() 获得的结果一致)。

下面的代码可以证明这一点:

Calendar calendar = Calendar.getInstance();

if (calendar instanceof GregorianCalendar)

System.out.println(“It is an instance of GregorianCalendar”);

Calendar 与 Date 的转换非常简单:

Calendar calendar = Calendar.getInstance();

// 从一个 Calendar 对象中获取 Date 对象

Date date = calendar.getTime();

// 将 Date 对象反应到一个 Calendar 对象中,

// Calendar/GregorianCalendar 没有构造函数可以接受 Date 对象

// 所以我们必需先获得一个实例,然后设置 Date 对象

calendar.setTime(date);

Calendar 对象在使用时,有一些值得注意的事项:

Calendar 的 set() 方法

set(int field, int value) – 是用来设置”年/月/日/小时/分钟/秒/微秒”等值

field 的定义在 Calendar 中

set(int year, int month, int day, int hour, int minute, int second) 但没有

set(int year, int month, int day, int hour, int minute, int second, int millisecond) 前面 set(int,int,int,int,int,int) 方法不会自动将 MilliSecond 清为 0。

另外,月份的起始值为0而不是1,所以要设置八月时,我们用7而不是8。

calendar.set(Calendar.MONTH, 7);

add() 的功能非常强大,add 可以对 Calendar 的字段进行计算。如果需要减去值,那么使用负数值就可以了,如 add(field, -value)。

add() 有两条规则:

当被修改的字段超出它可以的范围时,那么比它大的字段会自动修正。如:

Calendar cal1 = Calendar.getInstance();

cal1.set(2000, 8, 31, 0, 0 , 0); //2000-10-1

这个设置时间为10月1号;

加一个月,当超出当月的最后一天时,自动修正为最后一天

Calendar cal1 = Calendar.getInstance();

cal1.set(2000, 7, 31, 0, 0 , 0); //2000-8-31

cal1.add(Calendar.MONTH, 1); //2000-9-31 => 2000-10-1,对吗?

System.out.println(cal1.getTime()); //结果是 2000-9-30

另一个规则是,如果比它小的字段是不可变的(由 Calendar 的实现类决定),那么该小字段会修正到变化最小的值。

以上面的例子,9-31 就会变成 9-30,因为变化最小。

Roll() 的规则只有一条:

当被修改的字段超出它可以的范围时,那么比它大的字段不会被修正。如:

Calendar cal1 = Calendar.getInstance();

cal1.set(1999, 5, 6, 0, 0, 0); //1999-6-6, 周日

cal1.roll(Calendar.WEEK_OF_MONTH, -1); //1999-6-1, 周二

cal1.set(1999, 5, 6, 0, 0, 0); //1999-6-6, 周日

cal1.add(Calendar.WEEK_OF_MONTH, -1); //1999-5-30, 周日

WEEK_OF_MONTH 比 MONTH 字段小,所以 roll 不能修正 MONTH 字段。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值