【Java】日期类

日期和时间

从JDK 1.1开始, 不推荐使用Date中的相应方法,推荐使用Calendar类和DateFormat

  • Calendar类应该用于在日期和时间字段之间进行转换
  • DateFormat类应该用于格式化和解析日期字符串,SimpleDateFormat为该类的继承类

Calendar

用于在日期和时间字段之间进行转换

        //Calendar的getInstance方法返回一个Calendar对象,其日历字段已使用当前日期和时间初始化:
        //获取系统的当前日历对象
        Calendar calendar = Calendar.getInstance();

        //1、获取今天是周几,从星期天开始新的一周,即获取星期几为该数字-1
        int weekDay = calendar.get(Calendar.DAY_OF_WEEK);
        //2、获取系统当前年
        int year = calendar.get(Calendar.YEAR);
        //3、获取系统当前月,从0开始计算,January-一月为0
        int month = calendar.get(Calendar.MONTH);
        //4、获取系统当前日,几号
        int day = calendar.get(Calendar.DATE);
        //5、获取上午跟下午,0-AM,1-PM
        int am_pm = calendar.get(Calendar.AM_PM);

        //------------Calendar和Date转换------------
        //获取Date
        Date now = calendar.getTime();
        //Date类转换为Calendar类
        calendar.setTime(now);
        calendar.set(Calendar.YEAR, 2800);

        //------------Calendar日期计算以及判断------------
        //是否在某个时间(calendar2)之后
        System.out.println(calendar.after(calendar2));
        //是否在某个时间(calendar2)之前
        System.out.println(calendar.before(calendar2));
        //增加多少年年,月日以及时分秒同理
        calendar.add(Calendar.YEAR, -10);

SimpleDateFormat

用于格式化和解析日期字符串

        //6、获取当前的系统时间[date-->String]的过程
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss SSS");

        //将Date类转换为String
        Date time = new Date();//获取的是当前系统的时间
        String showTime = simpleDateFormat.format(time);

        //7、将String类转换为Date
        String strTime = "2021-07-07";
        Date date = simpleDateFormat.parse(strTime);

        //Calendar转换为SimpleDateFormat类
        simpleDateFormat.setCalendar(Calendar.getInstance());
        //SimpleDateFormat转换为Calendar类
        simpleDateFormat.getCalendar();

		//SimpleDateFormat类的setLenient方法是将输入的日期格式转化为标准日期
		simpleDateFormat.setLenient(false);	

通过SimpleDateFormat类解析字符串和Date对象时,该对象内部就存储数据。

日期格式

使用方式

//23-03-15 01:28:07 下午 周三
SimpleDateFormat sdf2 = new SimpleDateFormat("yy-MM-dd hh:mm:ss a E");
//2023-3月-015 001:028:007 下午 周三
SimpleDateFormat sdf3 = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss a E");

字母含义

字母含义说明
y或Y不分大小写,“y” , “yyy” , “yyyy” 匹配的都是4位完整的年,“yy” 匹配的是年的后两位
M只能为大写,“M"和"MM"对应数字,“MMM” 对应 “3月” “MMMM” 对应 “三月”,超过四位一直都显示"三月”
d区分大小写,d表示月中第几天,即几号,而D为年的第几天
h或H区分大小写,大写为24进制计时,小写为12进制计时
m只能为小写,为了避免和月混淆
s或S秒或毫秒区分大小写,小写以秒为单位,大写以毫秒为单位
aAm/pm 标记如果是上午就对应 “AM” , 如果是下午就对应 “PM”
E星期几只能为大写,“E” , “EE” , “EEE” 都对应 “Sun”,“EEEE” 对应 “Sunday” , 超出4位 , 仍然对应 “Sunday”
G年代标志符
z或Z时区区分大小写,z为General格林时区,Z为RFC 822时区
w或W第几周区分大小写,w为年的第几周,W为月的第几周
f或F第几星期区分大小写,f为年的第几星期,F为月的第几星期
k或K第几小时区分大小写,k为在一天中 (1~24)的小时数,K为在上午或下午 (0~11)中的小时数

除了特定格式外都符合:格式化为出现次数位,如果无法全部显示则自动拓展,否则前面填充0。

星期,由于具有特殊的常量名,因此超过四位不变

其中的分隔符"-"可以替换成其他非字母的任意字符(也可以是汉字)

常用方法

1、判断是否为闰年

闰年:凡公历中有闰日(2月29日)的年份,阴阳历中有闰月的年份。

1582年以来公历的置闰规则(一般只考虑这个):

  • 普通闰年:公历年份是4的倍数,且不是100的倍数的,为闰年(如2004年、2020年等就是闰年)。
  • 世纪闰年:公历年份是整百数的,必须是400的倍数才是闰年(如1900年不是闰年,2000年是闰年)。

1582年以前的惯例:

  • 四年一闰;如果公元A年的A(正数)能被4整除,那么它就是闰年;如果公元前B年的B(正数)除以4余1,那么它也是闰年。
    // 判断闰年
    static int judge(int year) {
        if (year % 400 == 0 || (year % 4 == 0 && year % 100 != 0)) {
            return 1;
        }
        return 0;
    }

2、获取每个月的天数

口诀:一月大、二月小、三月大、四月小、五月大、六月小、七月大、八月大、九月小、十月大、十一月小、十二月大

大月含有31天,小月含有30天,二月比较特殊,28天(闰年 29天)

    // 获取每个月的天数
    static int[] m = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
    static int getDays(int year, int month) {
        if (month == 2) {
            return 28 + judge(year);
        }
        return m[month];
    }
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值