• Java日期时间API系列3-----Jdk7及以前的日期时间类的不方便使用问题


    使用Java日期时间类,每个人都很熟悉每个项目中必不可少的工具类就是dateutil,包含各种日期计算,格式化等处理,而且常常会遇到找不到可用的处理方法,需要自己新增方法,处理过程很复杂。

    1.Date中的过时方法等

    Date中的方法一般都过时了,不建议使用,有一些歧义。比如:

    (1)new Date(2019,01,01)实际是3919年2月。因为Date的构造函数 的年份表示的始于1900年的差值。

    (2)month是从0开始的。

    (3)Date如果不格式化,打印出的日期可读性差。

    Fri Dec 13 23:08:12 CST 2019

    (4)Date和java.sql.Date命名完全一样,不易区分。

    2 Calendar操作繁琐、不支持复杂计算等

    Calendar虽然能够处理大部分的Date计算,但设计不是很成功,一些简单操作都要多次调用。对一些复杂的计算比如两个日期之间有多少个月,生日计算年龄等都不支持。比如:

    (1)DAY_OF_WEEK 的取值,是从周日(1)开始的。

            Calendar calendar = Calendar.getInstance();
            calendar.setTime(new Date());
            System.out.println(calendar.get(Calendar.DAY_OF_WEEK));

    (2)MONTH 的取值,是从0开始的。

            Calendar calendar = Calendar.getInstance();
            calendar.setTime(new Date());
            System.out.println(calendar.get(Calendar.MONTH));

    (3)set()方法延迟修改

    通过set()方法设置某一个字段的值得时候,该字段的值不会立马修改,直到下次调用get()、getTime()等时才会重新计算日历的时间。延迟修改的优势是多次调用set()方法不会触发多次不必要的计算。下面程序演示了set()方法延迟修改的效果:

    Calendar cal = Calendar.getInstance();
    cal.set(2003,7,31);//2003-8-31
    //将月份设为9,但9月31不存在
    //如果立即修改,系统会把cal自动调整到10月1日
    cal.set(Calendar.MONTH,8);
    //下面代码输出了10月1日
    System.out.println(cal.getTime());//(1)
    //设置DATE字段为5
    cal.set(Calendar.DATE, 5);//(2)
    System.out.println(cal.getTime());//(3)

    打印结果为:

    Wed Oct 01 22:25:41 CST 2003
    Sun Oct 05 22:25:41 CST 2003

    如果将(1)处的代码注释掉,打印结果为:

    Fri Sep 05 22:28:06 CST 2003

    你看明白了吗?如果将(1)处的代码注释掉,因为set()方法具有延迟性,它内部只是先记录下MONTH字段的值为8,接着程序将DATE字段设置为5,程序内部再次记录DATE字段的值为5——就是9月5日。

    3.日期类并不提供国际化,没有时区支持,因此Java引入了java.util.Calendar和java.util.TimeZone类,但他们同样存在上述所有的问题。

    参考:https://www.jianshu.com/p/1478af429a1e

          https://www.cnblogs.com/bingyimeiling/p/10420752.html

  • 相关阅读:
    Google搜索技巧
    20155219 《Java程序设计》实验一(Java开发环境的熟悉)实验报告
    20155219 2016-2017-2 《Java程序设计》第6周学习总结
    20155219 2016-2017-2 《Java程序设计》第5周学习总结
    20155219 2016-2017-2 《Java程序设计》第4周学习总结
    第四章第五章深入学习
    20155219 2016-2017-2 《Java程序设计》第3周学习总结
    20155219 2016-2017-2 《Java程序设计》第2周学习总结
    学号 20155219 《Java程序设计》第1周学习总结
    虚拟机的安装与学习20155219付颖卓
  • 原文地址:https://www.cnblogs.com/xkzhangsanx/p/12037775.html
Copyright © 2020-2023  润新知