Calendar类你可能不知道的坑

简介: Calendar类你可能不知道的坑

正文


package com.xiaojie.test;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
/**
 * @author xiaojie
 * @version 1.0
 * @description: Calendar代码
 * @date 2022/1/20 23:19
 */
public class CalendarDemo {
    public static void main(String[] args) throws ParseException {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
        Date date = sdf.parse("2021-12-26 13:14:15");
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        System.out.println("获取当前年份>>>>>>>>>>>>>>" + calendar.get(Calendar.YEAR));
        //月份是从0开始的
        System.out.println("获取当前月份>>>>>>>>>>>>>>" + (calendar.get(Calendar.MONTH) + 1));
        System.out.println("获取当前日期在当前月份第几天>>>>>>>>>>>>>>" + calendar.get(Calendar.DATE));
        System.out.println("获取当前日期在当前月份第几天>>>>>>>>>>>>>>" + calendar.get(Calendar.DAY_OF_MONTH));
        System.out.println("获取当前日期在当前年份第几天>>>>>>>>>>>>>>" + calendar.get(Calendar.DAY_OF_YEAR));
        System.out.println("获取当前日期在当前月份是第几周>>>>>>>>>>>>>>" + calendar.get(Calendar.WEEK_OF_MONTH));
        System.out.println("获取当前日期在当前年份是第几周>>>>>>>>>>>>>>" + calendar.get(Calendar.WEEK_OF_YEAR));
        //1-7分别是周日、一、二、三、四、五、六
        System.out.println("获取当前日期是星期几>>>>>>>>>>>>>>>>>>>>>>" + calendar.get(Calendar.DAY_OF_WEEK));
        System.out.println("获取当前日期的时间小时 12小时计时制>>>>>>>>>>>>>>>>>>>>>>" + calendar.get(Calendar.HOUR));
        //0表示上午,1-表示下午
        System.out.println("获取当前日期的时间为上午还是下午>>>>>>>>>>>>>>>>>>>>>>" + calendar.get(Calendar.AM_PM));
        System.out.println("获取当前日期的时间小时 24小时值>>>>>>>>>>>>>>>>>>>>>>" + calendar.get(Calendar.HOUR_OF_DAY));
        System.out.println("获取当前日期的时间分钟>>>>>>>>>>>>>>>>>>>>>>" + calendar.get(Calendar.MINUTE));
        System.out.println("获取当前日期的时间秒数>>>>>>>>>>>>>>>>>>>>>>" + calendar.get(Calendar.SECOND));
        System.out.println("获取当前日期的时间毫秒>>>>>>>>>>>>>>>>>>>>>>" + calendar.get(Calendar.MILLISECOND));
        //第二种设置日历方式
        Calendar calendar1 = Calendar.getInstance();
        calendar1.set(Calendar.YEAR, 2022);
        calendar1.set(Calendar.MONTH, 0);
        calendar1.set(Calendar.DATE, 20);
//        calendar.set(Calendar.HOUR,13); //12小时制
        calendar1.set(Calendar.HOUR_OF_DAY, 13);//24小时制
        calendar1.set(Calendar.MINUTE, 14);
        calendar1.set(Calendar.SECOND, 15);
        System.out.println("获取时间>>>calendar1>>>>>>" + sdf.format(calendar1.getTime()));
        //第三种
        Calendar calendar2 = Calendar.getInstance();
        calendar2.set(2022, 0, 21);//时分秒默认补齐
        System.out.println("获取日期>>>calendar2>>>>>>>>>" + calendar2.getTime());
        //第四种
        Calendar calendar3 = Calendar.getInstance();
        calendar3.set(2022, 0, 21, 13, 30);//时分秒默认补齐
        System.out.println("获取日期>>>calendar3>>>>>>>>>>" + calendar3.getTime());
        //第五种
        Calendar calendar4 = Calendar.getInstance();
        calendar4.set(2022, 0, 21, 13, 14, 15);//时分秒默认补齐
        System.out.println("获取日期>>>calendar4>>>>>>>>>>>>" + calendar4.getTime());
    }
}


执行结果如下图


222.png


坑一、


你会发现12月26日竟然是当前年份的第一周,这个搞得我有点凌乱啊


我是百思不能得解啊,终于后来我想明白了,这JAVA是TMD(甜蜜的)外国人写的,你有没有发现西方有个节日,对你没想错,就是圣诞节,我! 擦 !擦 !擦 !哦 麦噶扥 !!!原来西方人过完圣诞节后就开始新的第一周了。I Wish every day is merry, not just Christmas


所以如果仅仅是为了计算日期是当前年份的第几周,那么只需要把当前日期减去6之后,就可以实现啦。


坑二、


这个大部分人应该知道,一周的第一天是周日,而不是星期一所以Calendar.DAY_OF_WEEK的1-7分别代表周日、周一、周二、周三、周四、周五、周六。


坑三、


月份并不像我们认为的月份是从1开始的,月份在Calendar中是从0开始的,所以聪明的你一定知道我想说啥了。Calendar.MONTH中 0-11依次代表1-12月份,所以写代码时候需要注意了啊0是1月份,1是2月份以此类推。。。。

相关文章
Calendar 类的应用
Calendar 类的应用 Date 类最主要的作用就是获得当前时间,同时这个类里面也具有设置时间以及一些其他的功能,但是由于本身设计的问题,这些方法却遭到众多批评,不建议使用,更推荐使用 Calendar 类进行时间和日期的处理。
Date类,DateFormat类,Calendar类
Date类,DateFormat类,Calendar类
91 0
|
API
日期时间类(Date、DateFormat、Calendar)
日期时间类(Date、DateFormat、Calendar)
216 1
|
存储 Java API
Java日期时间类库Date/Calendar/JodaTime/LocalDateTime使用详解
本文目录 1. 不够好的开始 1.1 Date 日期时间类 1.2 Calendar 日历类 1.3 SimpleDateFormat 日期时间格式化 2. 足够好的JodaTime 3. JDK1.8 日期时间API
481 0
|
Java API 数据库
Java常用类(2)--日期时间相关类Date、Calendar、LocalDateTime、Instant全面
Java常用类(2)--日期时间相关类Date、Calendar、LocalDateTime、Instant全面
178 0
Java常用类(2)--日期时间相关类Date、Calendar、LocalDateTime、Instant全面
|
NoSQL Java 关系型数据库
calendar中set方法和静态属性带来的坑
坑在哪里: 在我之前接触的一个项目中涉及到这么一项功能:每天00:00:00把某些数据移动到mongodb数据库的另一个集合中,也就是关系型数据库的表中。这个集合名是一个固定的名称加上当前的两个月前的日期所在的年和月份。 这个功能是在我接触这个项目之前就已经存在,也就是之前的同事实现的功能,写了一个java的定时任务。 那个同事如今已经不在我们公司了,但是最近却发现这个功
1548 0

热门文章

最新文章