为什么 getMonth 在 java.sql.Date 和 java.util.Date 上被弃用

Nic*_*ick 2 java scala date deprecated design-decisions

我应该先使用 Apache Spark,它使用java.sql.Date,以防有人建议我应该使用java.time. 下面的示例在 Scala 中。

我使用(已弃用)获取日期的月份的 API 如下:

val date: java.sql.Date = ???
val month = date.getMonth()
Run Code Online (Sandbox Code Playgroud)

但是,如果我根据弃用情况查看我应该如何执行此操作,则上面的代码将重写如下:

val date: java.sql.Date = ???
val cal = Calendar.getInstance()
cal.setTime(date)
cal.get(Calendar.MONTH)
Run Code Online (Sandbox Code Playgroud)

代码的简单性和可读性明显不同,从函数式编程的角度来看,日期作为日历的副作用并不是非常好。有人可以解释为什么他们认为进行了这种更改吗?

Mic*_*ael 5

在 JDK 1.1 之前,类 Date 有两个附加功能。它允许将日期解释为年、月、日、小时、分钟和秒值。它还允许格式化和解析日期字符串。不幸的是,这些函数的 API不适合国际化。从 JDK 1.1 开始,应该使用 Calendar 类在日期和时间字段之间进行转换,并且应该使用 DateFormat 类来格式化和解析日期字符串。不推荐使用 Date 中的相应方法。

JavaDoc解释了。国际化。


如果有人建议我应该使用来自java.time“的日期

没有什么可以阻止您java.time尽快转换为类,执行您需要的任何计算/修改,如果您需要重新插入,请java.sql.Date再次转换回。