日期跨年问题

日期格式化写得不对,从2020.12.27(周日)开始,会算成2021年。 问题:日期格式化,正确的格式应该是yyyyMMdd,如果写成YYYYMMdd,就会变成2021年

原因:y表示Year,Y表示Week Year

复现代码

    public static void main(String[] args) {
        // 使用大写 'Y' 表示周年
        SimpleDateFormat sdf = new SimpleDateFormat("YYYYMMdd");

        // 使用指定日期(2020-12-27,星期日)
        LocalDate localDate = LocalDate.of(2020, 12, 27);
        Date date = Date.from(localDate.atStartOfDay().atZone(ZoneId.systemDefault()).toInstant());

        System.out.println(date);

        String formattedDate = sdf.format(date);
        System.out.println("Formatted Date: " + formattedDate);
    }

详细说明

https://blog.csdn.net/qq_33391863/article/details/122875879

1.大写的“YYYY” 是week-based year 是ISO-8601规定的,它表示的是当天所在周属于哪一年,比如2021.12.27-2022.1.2 这一周夸年了,所以格式化成下一年了,也就是2022年了。

2.大写的MM是代表的月份,小写的mm是代表的分钟,所以这里是为了区分月份和分钟。

3.大写的D打印出来的时间是这一年中的那一天,小写的d是这个月中的那一天。

4.HH是大写是为了区分时区12小时还是24小时小写的h是12小时制,大写的H是24小时制。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值