Java中使用时间转换时出现的一些问题

一 YYYY-MM-dd与yyyy-MM-dd 的区别

YYYY是week-based-year,表示当天所在的周属于的年份,一同从周日开始,周六结束,只要本周跨年那么这周就算入下一个年份中。所以2019年12月31日那天在这种转换方式下就是2020年。而当yyyy这种情况下年份就是2019。

public static void main(String[] args) {
        SimpleDateFormat simpleDateFormat=new SimpleDateFormat("yyyy-MM-dd");
        SimpleDateFormat simpleDateFormat1=new SimpleDateFormat("YYYY-MM-dd");
        Calendar calendar=Calendar.getInstance();
        calendar.set(2019, 11, 31);
        System.out.println("yyyy-MM-dd格式转换:"+simpleDateFormat.format(calendar.getTime()));
        System.out.println("YYYY-MM-dd格式转换:"+simpleDateFormat1.format(calendar.getTime()));

    }

控制台输入如下:
在这里插入图片描述

二 HH:mm:ss与hh:mm:ss的区别

HH表示24小时制,从0开始到23,而hh则是12小时制,从1开始到12.

public static void main(String[] args) {
        SimpleDateFormat simpleDateFormat=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        SimpleDateFormat simpleDateFormat1=new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
        Calendar calendar=Calendar.getInstance();
        calendar.set(2019, 11, 31,14,20,20);
        System.out.println("yyyy-MM-dd HH:mm:ss格式转换:"+simpleDateFormat.format(calendar.getTime()));
        System.out.println("yyyy-MM-dd hh:mm:ss格式转换:"+simpleDateFormat1.format(calendar.getTime()));

    }

控制台输出如下:
在这里插入图片描述

三 当你用时间戳计算来获得当前时间几天前的时间出现的问题

public static void main(String[] args) {
        String date = getDate(30);
    }

    public static String getDate(int days){
        SimpleDateFormat simpleDateFormat=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        //获取当前时间对应的时间戳
        long nowTime=System.currentTimeMillis();
        System.out.println("当前时间:"+simpleDateFormat.format(nowTime));
        System.out.println("int类型最大值:"+Integer.MAX_VALUE);
        System.out.println("int类型最小值:"+Integer.MIN_VALUE);
        //获取要减去days的时间戳
        long test= days*24*60*60*1000;
        System.out.println((long)days*24*60*60*1000);
        System.out.println("要被减去days的时间戳:"+test);
        //获取days天前时间对应的时间戳
        long yesTime=nowTime-test;
        String yesTimeStr = simpleDateFormat.format(yesTime);
        System.out.println("days天前的时间"+yesTimeStr);

        return yesTimeStr;
    }

控制台打印:
在这里插入图片描述
从上面打印可以看到,当你计算days天对应的时间戳时,结果的值如果超出了int类型的最大值时,会出现溢出得到负数的结果,这使得后面计算结果出现问题.至于为什么溢出后得到是这样的结果.大家有兴趣可以看看这篇博客:https://www.cnblogs.com/hesiyi/p/6963435.html

说回上面的问题,有2种方法解决,一种是使用强制转换(long)days* 24* 60* 60* 1000,另一种是在接受days时就用long类型接受就行.

但其实在遇到这种获取days天前的当前时间用Calendar计算比较好点,不会出现上面的问题.

public static void main(String[] args) {
        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        Calendar calendar=Calendar.getInstance();
        System.out.println("当前时间:"+format.format(calendar.getTime()));
        calendar.add(Calendar.DATE,-30);
        Date today = calendar.getTime();
        System.out.println("30天前的:"+format.format(today));

    }

控制台打印:
在这里插入图片描述
作为初学者最近在使用日期进行转换时出现以上问题,所以打算整理下来,希望对大家有帮助,有什么不对的地方大家可以在评论区指出来,大家一起学习进步!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值