java - 为什么 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)
代码的简单性和可读性明显不同,从函数式编程的角度来看,日期作为日历的副作用并不是非常好。有人可以解释为什么他们认为做出了这种改变吗?
解决方案
在 JDK 1.1 之前,Date 类有两个附加功能。它允许将日期解释为年、月、日、小时、分钟和秒值。它还允许格式化和解析日期字符串。不幸的是,这些函数的 API不适合国际化。从 JDK 1.1 开始,应使用 Calendar 类在日期和时间字段之间进行转换,并且应使用 DateFormat 类来格式化和解析日期字符串。Date 中的相应方法已弃用。
JavaDoc解释了。国际化。
“万一有人建议我应该使用来自java.time
”的日期
没有什么可以阻止您java.time
尽快转换为类,执行您需要的任何计算/修改,如果您需要重新插入,请java.sql.Date
再次转换回。
推荐阅读
- cordova - Gradle 错误无法创建 ScriptPluginFactory 类型的服务
- python-3.x - 如何制作两列的散点图并将 x_axis 划分为 3 列 f1、f2 和 f3
- c# - 到达对话流程中的某个步骤时,自动从聊天机器人视图切换到 ionic 移动应用程序页面
- jquery - 如何在 jquery 回调函数中发送 Typescript 变量?
- java - 如何在每天的特定时间使用 java 发送邮件
- r - 如何在 R-Shiny 中实现未来功能
- game-engine - gdscript 全局变量值在 get_tree().reload_current_scene() 之后没有改变
- apache-spark - 默认情况下,Spark sql 模式中的可空性是建议性的。严格执行它的最佳方法是什么?
- swift - 如何初始加载 UITableView 然后观察 Firebase 节点以更改在 Swift 中刷新 tableview?
- azure-devops - 防止用户在 Azure Devops (VSTS) 中创建没有父级的工作项