SimpleDateFormat 时间解析出错 “YYYY“ “yyyy“有什么不同?

5 篇文章 0 订阅

SimpleDateFormat 传入的参数大小写字母是有讲究的,踩过的坑是:解析年份出错

看下图 Y 表示的是weak year,他是什么含义呢?jdk下面有案例,但是没有给到特殊情况,我也是看其他博客的描述,然后自己实验了一下,发现他的含义是这样的

如果这一天所在的一周,跨年了,那这一天算是下一年的,月份和日不会变,只有年份会增多一年,所以会有那几天会解析错年份,注意:每周从周日开始

这是jdk.18 开发手册里面 SimpleDateFormat 这个类传入参数的年月日具体含义
在这里插入图片描述
代码测试

package test3;

import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

public class SimpleDateFormatTest {
    public static void main(String[] args) {
        Calendar calendar = Calendar.getInstance();
        calendar.set(2021,Calendar.DECEMBER,26);
        Date time = calendar.getTime();

        SimpleDateFormat date1 = new SimpleDateFormat("YYYY-MM-dd");
        System.out.println("YYYY:"+date1.format(time));
        SimpleDateFormat date2 = new SimpleDateFormat("yyyy-MM-dd");
        System.out.println("yyyy:"+date2.format(time));
        
    }
}

正常:

1)当日期为2021-12-25及这一年之前的时间,是不会解析错年份的,因为这一天所在的周,没有跨年
运行结果1:
YYYY:2021-12-25
yyyy:2021-12-25

异常:

2)当日期为2021-12-26到31号时,这一周是跨年的,解析这几天是属于下一年的
运行结果2:
YYYY:2022-12-26
yyyy:2021-12-26

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值