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); 

 





posted @ 2016-08-13 14:07  沧海一滴  阅读(2289)  评论(0编辑  收藏  举报