java - 为什么不推荐使用 "new Date(int year, int month, int day)"?

标签 java date deprecated

我最近继承的应用程序充满了关于构造函数的弃用警告:

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% 的时间来执行。

最佳答案

最初,Date 旨在包含有关日期的所有逻辑,但 API 设计者最终意识到他们迄今为止所拥有的 API 严重不足,无法干净地扩展以正确处理诸如此类的问题作为时区、语言环境、不同的日历、夏令时等。

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

顺便说一句,在内部,这些方法,例如 Date(int, int, int) 构造函数现在调用 Calendar,所以如果您发现速度有所不同,那么您就是调用 Calendar 时出错。

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

关于java - 为什么不推荐使用 "new Date(int year, int month, int day)"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/460423/

相关文章:

java - 如何更改 Spring Cloud Stream 配置中所有 RabbitMQ 消费者的默认恢复间隔?

perl - 在 Perl 中循环两个日期的最佳方式是什么?

google-cloud-platform - Google Storage Bucket 允许查看对象但不能列出

c++ - 未定义对 wxGLCanvas 构造函数的引用?

php - 与 ereg_replace() 的混淆 开始 PHP 和 MySQL 示例,作者:W Jason Gilmore

java - 无法弄清楚如何在字符串中存储 "Save As"文本并使用它

java - 关于对象比较

java - Java 中的私有(private)辅助方法与公共(public)静态实用程序方法

sql - 此时如何选择 4 天前的日期?

swift - 在 Swift 中将字符串转换为日期