Calendar专题
Calendar中add()和roll()函数的用法
一、取某个时间点后的整点时刻。例如1984年7月7日15:23:05后的整点时刻即为1984-07-07 16:00:00。
实现如下:
Calendar calendar = Calendar.getInstance();
calendar.add(Calendar.HOUR_OF_DAY, 1);//小时上加1
calendar.set(Calendar.MINUTE, 0);//分钟设为0
calendar.set(Calendar.SECOND, 0);//秒钟设为0
二、取某个日历之前的某个月。例如要取2002年1月12号之前1个月的时间,应该是2001年12月12日。
Calendar calendar = Calendar.getInstance();
calendar.set(2002, 0, 12);//代表2002年1月12日
calendar.add(Calendar.MONTH, -1);//这样就将日期设置成了2001年12月12日。
System.out.println(calendar.getTime().toString());
但是这种情况如果用roll()来实现。如以下代码:
Calendar calendar = Calendar.getInstance();
calendar.set(2002, 0, 12);//代表2002年1月12日
calendar.roll(Calendar.MONTH, -1);//这样就将日期设置成了2002年12月12日。
System.out.println(calendar.getTime().toString());
结论:roll()函数处理,只会对相应的字段进行处理,不会智能的对其它字段也进行逻辑上的改变。
add()函数会在逻辑上改变其它字段,使结果正确。
注:Calendar中的Month是从0-11的,0代表1月,11代表12月。
http://blog.sina.com.cn/s/blog_62c89b450100sau9.html
/** * Expecting: * <2021-01-16T00:00:00.000 (java.util.Date)> * to be equal to: * <2021-02-16T00:00:00.922 (java.util.Date)> * but was not. * Expected :2021-02-16T00:00:00.922 (java.util.Date) * Actual :2021-01-16T00:00:00.000 (java.util.Date) * <p> * 初始值 * 代码如下,值得指出的是由于我们的时区设置是GMT+8,所以打印格林威治时间得到的是1970-01-01 08:00:00. * Calendar cal = Calendar.getInstance();//得到当前时间 * cal.setTimeInMillis(0);//转换成格林威治时间 1970-01-01T08:00:00.000 */ @Test public void given_StringDateTime_when_no_locale_then_LocalDateTime() { Calendar calendar = Calendar.getInstance(); calendar.set(2021, Calendar.JANUARY, 16, 0, 0, 0); /** * 原因是Calendar.getInstance()时候,会给Calendar赋值为当前时间的毫秒值,调用set方法会根据参数对年、月、日、时、分、秒对应的值进行替换。 * 然而无法对毫秒值进行替换,所以毫秒值是创建Calendar对象时的毫秒值。 */ calendar.set(Calendar.MILLISECOND, 0); Date expected = calendar.getTime(); String dateString = "2021-01-16 00:00:00"; LocalDateTime localDateTime = LocalDateTime.parse(dateString, DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss").withLocale(Locale.SIMPLIFIED_CHINESE)); Date actual = localDateTime.toDate(); System.out.println(actual); assertThat(actual).isEqualTo(expected); }
public void getTimeByCalendar(){ Calendar cal = Calendar.getInstance(); int year = cal.get(Calendar.YEAR);//获取年份 int month=cal.get(Calendar.MONTH);//获取月份 int day=cal.get(Calendar.DATE);//获取日 int hour=cal.get(Calendar.HOUR);//小时 int minute=cal.get(Calendar.MINUTE);//分 int second=cal.get(Calendar.SECOND);//秒 int WeekOfYear = cal.get(Calendar.DAY_OF_WEEK);//一周的第几天 System.out.println("现在的时间是:公元"+year+"年"+month+"月"+day+"日 "+hour+"时"+minute+"分"+second+"秒 星期"+WeekOfYear); }
(1) Calendar转化为Date Calendar cal=Calendar.getInstance(); Date date=cal.getTime(); (2) Date转化为Calendar Date date=new Date(); Calendar cal=Calendar.getInstance(); cal.setTime(date);