当前位置:  开发笔记 > 编程语言 > 正文

为什么"新日期(int year,int month,int day)"已弃用?

如何解决《为什么"新日期(intyear,intmonth,intday)"已弃用?》经验,为你挑选了4个好方法。

我最近继承的应用程序是关于构造函数的全部弃用警告:

Date d = new Date(int year, int month, int day)

有没有人知道或者可以指出为什么像这样简单的东西被这样的东西"替换"的原因:

Date d = null;
Calendar cal = GregorianCalendar.getInstance();
cal.set(1900 + year, month, day);
d = cal.getTime();

现在,显然弃用警告本身并不是一个问题,但你能想象如果这个构造函数被删除,数百万的LOC会在痛苦中哭泣吗?

在我简短的基准测试中,后者需要大约50%的时间来执行.



1> Michael Borg..:

最初,Date旨在包含有关日期的所有逻辑,但API设计者最终意识到他们迄今为止所使用的API严重不足,无法彻底扩展以正确处理时区,区域设置,不同日历,夏令时等问题等

因此,他们创建Calendar了处理所有复杂性,并降级Date为简单的时间戳,弃用了处理格式化,解析和单个日期字段的所有功能.

顺便说一句,在内部这些方法,如Date(int, int, int)构造函数现在调用Calendar,所以如果你看到速度的差异,那么你在调用时做错了Calendar.

底线:这不是Java的CalendarAPI过于复杂,它是人类的日期概念,唯一的问题Calendar是它提供了对最常见用法的快捷方式.



2> Einar..:

Java Date API一直受到批评,例如参见这个帖子.

您可能需要查看Joda-Time或Apache Commons Lang以获取其他日期/时间实用程序.



3> guerda..:

答案是便携性.

班级Date不是很灵活.您可以定义日期,但不能将其转换为其他日历格式.所以Sun决定使用额外的类层次结构(Calendar)来使其更灵活.

尽管如此,它并不是很方便.



4> Adeel Ansari..:

主要是因为原始java.util.Date臃肿,并没有完全时区感知,也没有国际化友好.

但是,Date仍在使用,非常好,在Value Objects中,或者说作为数据类型.只要你明确地使它成为不可变的,你就可以放心.我倾向于认为它必须是不可变的,为了其他目的我们有Calendar来操纵.在预期的操作很多的地方,人们应该考虑像Joda-Time这样的东西.

将帖子

只是不要在后面的代码中实例化Date.它毫无用处.您可以为您的基准测试获得更好的结果.

推荐阅读
小白也坚强_177
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有