Java中【年(year)和周年(week year)】的区别

本文深入探讨了Java中日期格式“YYYY-MM-dd”与“yyyy-MM-dd”的区别,解析了周年与普通年的概念,并通过代码示例展示了两者在实际应用中的不同表现。文章还提供了源码分析方向的建议,推荐使用Java.time包以获取更精确的时间处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在将日期格式化的时候,不注意的话代码中可能同时存在“yyyy-MM-dd”和“YYYY-MM-dd”两种格式,date格式为“YYYY-MM-dd”表示的是周年,date格式为“yyyy-MM-dd”表示的是年。

这两种格式是的功能是完全一样的吗?

先上代码测试一下:

import java.text.SimpleDateFormat;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Date;

/**
 * @author *** on 2019-12-30 21:02
 */
public class testDate {
    public static void main(String[] args) {
        SimpleDateFormat sdfUpperCase = new SimpleDateFormat("YYYY-MM-dd");
        SimpleDateFormat sdfLowerCase = new SimpleDateFormat("yyyy-MM-dd");
        Date nowDate = new Date();
        System.out.println("now = " + nowDate);
        System.out.println("upperCase nowDate = " + sdfUpperCase.format(nowDate));
        System.out.println("lowerCase nowDate = " + sdfLowerCase.format(nowDate));
        System.out.println();

        LocalDateTime nowTime = LocalDateTime.now();
        System.out.println("now = " + nowTime);
        DateTimeFormatter dtfUpperCase = DateTimeFormatter.ofPattern("YYYY-MM-dd");
        DateTimeFormatter dtfLowerCase = DateTimeFormatter.ofPattern("yyyy-MM-dd");
        System.out.println("upperCase nowDate = " + nowTime.format(dtfUpperCase));
        System.out.println("lowerCase nowDate = " + nowTime.format(dtfLowerCase));
    }
}

结果如下:

now = Tue Dec 31 17:09:22 CST 2019
upperCase nowDate = 2020-12-31
lowerCase nowDate = 2019-12-31

now = 2019-12-31T17:09:22.904
upperCase nowDate = 2020-12-31
lowerCase nowDate = 2019-12-31

Process finished with exit code 0

显然,结果是不同的。这是为什么呢?

参考了以下两篇文章,梳理一下原因:

year 和 weak year 的区别JAVA周年问题

简单解释下:

A week year is in sync with a WEEK_OF_YEAR cycle. 
All weeks between the first and last weeks (inclusive) have the same week year value. 
Therefore, the first and last days of a week year may have different calendar yearvalues.

周年是是按每周更新的;

一年中,第一周和最后一周之间的每周的周年和当时的年份是一致的;

但是第一周和最后一周的周年可能和当时的年份不一致的。

 

如在2019年12月31日(星期二)这天,年是2019年,但周年就成了2020年。

 

具体的源码还没有细看,通过这个问题给自己的结论就是:

1、以后日期尽量使用“yyyy-MM-dd”这种格式;

2、后面可以尝试使用Java.time包获取更准确的时间。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值