教你Calendar API 快速入手

Calendar

Calendar 是一个抽象类
用于在特定时间点和一组字段之间进行转换

声明

Calendar rightNow = Calendar.getInstance();//获得当前时间
rightNow.getTime()//获得 型如 Thu Nov 12 00:00:51 CST 1998 的人易读的时间格式
milis = rightNow..getTimeInMillis()// 获得从the Epoch January 1, 1970 00:00:00.000 GMT 到现在的毫秒数  类似 910800007000

set(field,value)设置

设置精确的日期组合方式

For the date fields:

  • YEAR + MONTH + DAY_OF_MONTH
  • YEAR + MONTH + WEEK_OF_MONTH + DAY_OF_WEEK
  • YEAR + MONTH + DAY_OF_WEEK_IN_MONTH + DAY_OF_WEEK
  • YEAR + DAY_OF_YEAR
  • YEAR + DAY_OF_WEEK + WEEK_OF_YEAR

时间的设置

For the time of day fields:

  • HOUR_OF_DAY
  • AM_PM + HOUR

Calendar 中可设置的field这里没有完全给出 具体请参考 java API

set(f,v) 应用

Calendar cal = Calendar.getInstance();//获取当前时间 (timestamp) Mon Mar 09 20:04:26 CST 2020
cal.set(Calendar.YEAR, 1998);
cal.set(Calendar.MONTH, 10);
cal.set(Calendar.DAY_OF_MONTH, 4);
cal.set(Calendar.HOUR_OF_DAY, 0);
System.out.println(calendar.getTime());
		//设置日期为 1998年11月4号凌晨

输出

Wed Nov 04 00:04:26 CST 1998

field 是一些代表日期的单词

value 是field的值 可以是数字也可以是对应的英文

但是如果不存在特定的英文名词或者在Calendar 中没有定义则只能用数字

下面是月份和星期所对应的数字及其英文(Calendar中全是大写)

time&datewordnumber
一月January0
二月February1
三月March2
四月April3
五月May4
六月June5
七月July6
八月August7
九月September8
十月October9
十一月November10
十二月December11
周一Monday2
周二Tuesday3
周三Wednesday4
周四Thursday5
周五Friday6
周六Saturday7
周日Sunday1

我们穿越去即将到来的愚人节 (4.1)

数字设置

	calendar = Calendar.getInstance();
	calendar.set(Calendar.YEAR, 2020);
	calendar.set(Calendar.MONTH, 3);
	calendar.set(Calendar.WEEK_OF_MONTH, 1);
	calendar.set(Calendar.DAY_OF_WEEK, 4);
	System.out.println(calendar.getTime());

输出
Wed Apr 01 20:23:42 CST 2020

英文名词设置

	calendar = Calendar.getInstance();
	calendar.set(Calendar.YEAR, 2020);
	calendar.set(Calendar.MONTH, Calendar.APRIL);
	calendar.set(Calendar.WEEK_OF_MONTH, 1);
	calendar.set(Calendar.DAY_OF_WEEK, Calendar.WEDNESDAY);
	System.out.println(calendar.getTime());

输出
Wed Apr 01 20:23:42 CST 2020

tip: set() 过后的calendar 是不会立即变化的,只有结果计算后calendar才会变化。

上例中,calendar的field的变化是在calendar.getTime()时如果没有这句话,calendar中的各filed是不变的。

溢出问题

拿4月(30天)来讲,在设置set(Calendar.DAY_OF_MONTH, 31)不小心给了value = 31,月份会变成日期会变成五月一号,如果设成32就是五月2号。是往前推进的。

get(field)

参数是日期名 如 获得月份

get(Calendar.MONTH)

add(field,delta)

参数是日期名和变化量

变化量课正可负

作用同 set(field , get(field)+delta) 但不同的是 add()是立即立即计算calendar中的值立刻变化

溢出问题

当日期是4月30号时 add(Calendar.DAY_OF_MONTH, 1)会变成5月1号也是递进的

roll()

roll(int field, boolean up);//当前值上加一(up = true)或者减一(up = false)
roll(int field,int amount);//当前值上加amount(amount可正可负)

问题来了,roll()和add() 功能不是一样吗????(黑人之问)

其区别在

溢出问题

当日期是4月30号时roll(Calendar.DAY_OF_MONTH, 1)得到的日期是4月1号

懂了吧!roll() 如果溢出则是在当前field的范围内循环,不会进位到高层次。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值