java日期中YYYY与yyyy的区别

#简介
我不知道各位小伙伴有没有在开发中使用过new SimpleDateFormat("YYYY-MM-dd HH:mm:ss"),在使用的时候发现YYYY与yyyy的效果没什么区别,但是其实是有问题的!
#案例:

需求: 我想统计一下当前10分钟内巡河的人员。

过程1: 于是我单元测试获取十分钟前的时间,发现并没有什么问题,很开心。

    @Test
    public void currenttime() {
        Date date = new Date();
        Date olddate = new Date(date.getTime() - 10 * 60 * 1000);
        String time = new SimpleDateFormat("YYYY-MM-dd HH:mm:ss").format(olddate);
        System.out.println(time);
    }

过程2: 然后再web中写了一个这样的工具方法,之后发现整个接口,一条数据都取不到。。。

  public String get_oldtime(String current_time, int i) {
        Date date = new Date();
        if (!"".equals(current_time)) {
            try {
                date = new SimpleDateFormat("YYYY-MM-dd HH:mm:ss").parse(current_time);
            } catch (ParseException e) {
                date = new Date();
            }
        }
        Date olddate = new Date(date.getTime() - i * 60 * 1000);
        String time = new SimpleDateFormat("YYYY-MM-dd HH:mm:ss").format(olddate);
        return time;
    }

过程3: 于是debug,发现问题定位就在这个方法上,然后我又重返junit上。


    @Test
    public void currenttime() {
        System.out.println(get_oldtime("2018-06-04 09:30:00", 10));
    }
    public String get_oldtime(String current_time, int i) {
        Date date = new Date();
        if (!"".equals(current_time)) {
            try {
                date = new SimpleDateFormat("YYYY-MM-dd HH:mm:ss").parse(current_time);
                System.out.println(date);
            } catch (ParseException e) {
                date = new Date();
            }
        }
        Date olddate = new Date(date.getTime() - i * 60 * 1000);
        String time = new SimpleDateFormat("YYYY-MM-dd HH:mm:ss").format(olddate);
        return time;
    }

运行结果: 神奇的事情出现了。。。2018-06-04 09:30:00为什变成了2017年???
这里写图片描述

过程4: 于是开始了度娘,发现YYYY是表示:当天所在的周属于的年份,一周从周日开始,周六结束,只要本周跨年,那么这周就算入下一年。

过程5: 但是我觉得这个规律有点问题:首先我们来看正向转换吧,即:date->string
这里写图片描述
过程6: 没错,正向转换确实是复合这个规律的,但是逆向(string->date)呢?
这里写图片描述
疑问: 我又不是2017-12-31 09:30:00,或者2018-12-31 09:30:00为什么逆向转换变成了2017年???为了验证这个东西(排除2018-12-31不是周六的干扰),我还特地查了一下,2005年的12月31号是周6,按照上面那个结论是不是应该能逆向转换成功?
这里写图片描述
这里写图片描述

过程7: 发现结果并没有转成功,这说明这个结论还是有点问题的,至少在逆向转换的时候还存在问题啊!

个人猜想: YYYY在逆向转换的时候
1、如果去年12月31号不是周六的话:返回日期是去年年底的最后一周的第一天(即周日)的零点零分零秒。
2、如果去年12月31号是周六的话,返回的是今年第一天零点零分零秒。
3、用YYYY逆向转换永远得不到你想要的值。

总结:

个人觉得:当天所在的周属于的年份,一周从周日开始,周六结束,只要本周跨年,那么这周就算入下一年。这个结论在正向转换的时候是没有问题的,但是在逆向转换的时候是有问题的。

微信公众号关注: 965净化者

在这里插入图片描述

  • 9
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值