首页 > 解决方案 > 为什么 getMonth 在 java.sql.Date 和 java.util.Date 上被弃用

问题描述

我应该以我使用 Apache Spark 作为开头,它使用java.sql.Date,以防有人建议我应该使用java.time. 下面的例子是在 Scala 中。

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

val date: java.sql.Date = ???
val month = date.getMonth()

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

val date: java.sql.Date = ???
val cal = Calendar.getInstance()
cal.setTime(date)
cal.get(Calendar.MONTH)

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

标签: javascaladatedeprecateddesign-decisions

解决方案


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

JavaDoc解释了。国际化。


万一有人建议我应该使用来自java.time”的日期

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


推荐阅读