java yyyy和yyyy_java中date类型的日期应该怎么写[通俗易懂]

java yyyy和yyyy_java中date类型的日期应该怎么写[通俗易懂]简介我不知道各位小伙伴有没有在开发中使用过newSimpleDateFormat("YYYY-MM-ddHH:mm:ss"),在使用的时候发现

#简介
我不知道各位小伙伴有没有在开发中使用过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净化者

在这里插入图片描述

今天的文章java yyyy和yyyy_java中date类型的日期应该怎么写[通俗易懂]分享到此就结束了,感谢您的阅读。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:http://bianchenghao.cn/77663.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注