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月份以此类推。。。。

相关文章
|
6月前
|
Java 关系型数据库 MySQL
37、一篇文章学习 Java 中的日期相关类(Date 和 Calendar),非常常用
37、一篇文章学习 Java 中的日期相关类(Date 和 Calendar),非常常用
68 0
|
Java API
Java常用API(三)Date,DateFormat和Calendar
Java常用API(三)Date,DateFormat和Calendar
80 0
|
Java 关系型数据库 MySQL
Date和Calendar
Date和Calendar
123 0
Date类,DateFormat类,Calendar类
Date类,DateFormat类,Calendar类
81 0
|
Java API 数据库
Java常用类(2)--日期时间相关类Date、Calendar、LocalDateTime、Instant全面
Java常用类(2)--日期时间相关类Date、Calendar、LocalDateTime、Instant全面
161 0
Java常用类(2)--日期时间相关类Date、Calendar、LocalDateTime、Instant全面
|
Java
Java中时间日期类之Date类、SimplDateFormat类、Calendar类及二月天案例
时间日期类之Date类、SimplDateFormat类、Calendar类及二月天案例的简单示例
397 0
Java中时间日期类之Date类、SimplDateFormat类、Calendar类及二月天案例
|
Java
Java常用类之Calendar类
Java常用类之Calendar类
202 1
Java常用类之Calendar类