慎用Calender转换时间

本文通过一个实例展示了在Java中使用Calendar类进行日期转换时,使用'YYYY-MM-dd'格式可能会导致意外的年份变化。详细解释了'y'和'Y'的区别,'y'表示正统的年份,而'Y'则是基于周的年份,当日期跨越新年周时,'Y'会提前到下一年。这个小细节可能导致显示错误,开发者需要注意避免此类问题。
摘要由CSDN通过智能技术生成

问题场景:

在许多项目的场景中,我们可能都需要生成时间,大家可能一般都会使用new Date() ,但是也会有人使用Calender类来生成,下面我们看一个案例,提醒大家使用Calender时一定要慎重,要不然就可能出现大错误。

问题描述:

现在我们有一个生成时间和转化时间的测试类,我们看看它的运行结果。

public class DateTest {
    public static void main(String[] args) {
        Calendar calendar = Calendar.getInstance();
        calendar.set(2019,Calendar.AUGUST,31);
        Date time = calendar.getTime();
        DateFormat format_yy = new SimpleDateFormat("yyyy-MM-dd");
        System.out.println("2019-08-31 to yy-MM-dd: "+format_yy.format(time));
        DateFormat format_YY = new SimpleDateFormat("YYYY-MM-dd");
        System.out.println("2019-08-31 to YY-MM-dd: "+format_YY.format(time));

        calendar.set(2019,Calendar.DECEMBER,31);
        Date time_12 = calendar.getTime();
        System.out.println("--------------");
        System.out.println("2019-12-31 to yy-MM-dd: "+format_yy.format(time_12));
        System.out.println("2019-12-31 to YY-MM-dd: "+format_YY.format(time_12));
    }
}

运行结果如下:

2019-08-31 to yy-MM-dd: 2019-08-31
2019-08-31 to YY-MM-dd: 2019-08-31
--------------
2019-12-31 to yy-MM-dd: 2019-12-31
2019-12-31 to YY-MM-dd: 2020-12-31

大家可以直观的看到,日期转换格式我们使用了"yyyy-MM-dd"和"YYYY-MM-dd"两种不同的形式,可以看到输出的结果中,普通的日期是没有什么区别的,但是当输出12-31的时候,年份就发生了变化。

虽然这个是一个很小的细节,但是在开发中如果真正显示到页面上,用户看了也会一脸懵好吧,所以我们可以查阅资料解释下。

原因分析:

y:year-of-era;正正经经的年,即元旦过后;
Y:week-based-year;只要本周跨年,那么这周就算入下一年;
就比如说今2019-2020的12.31 这一周是跨年的一周,而 12.31 是周二,那使用 YYYY 的话会显示 2020,使用 yyyy 则会从 1.1 才开始算是 2020。

这个小的细节还是希望大家能够注意一下。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值