在 Scala 中处理日期和时间的标准方法是什么?我应该使用 Java.util 这样的 Java 类型吗。还是有原生的 Scala 替代品?
从 JavaSE 8开始,用户被要求迁移到 Java.time (JSR-310)。有人努力为 scala (如 Scala 时间)创建包装 java.time 的 scala 库。如果目标低于 SE8使用下列之一。请参阅 为什么 JSR-310不是 Joda-Time
Awesome Scala 列出了许多流行的 Scala DateTime apis
一个新的用于 Joda Time 的 Scala 包装器。这个项目由 scala 时间分叉而来,因为似乎不再维护 scala 时间。
import com.github.nscala_time.time.Imports._ DateTime.now // returns org.joda.time.DateTime = 2009-04-27T13:25:42.659-07:00 DateTime.now.hour(2).minute(45).second(10) // returns org.joda.time.DateTime = 2009-04-27T02:45:10.313-07:00 DateTime.now + 2.months // returns org.joda.time.DateTime = 2009-06-27T13:25:59.195-07:00 DateTime.nextMonth < DateTime.now + 2.months // returns Boolean = true DateTime.now to DateTime.tomorrow // return org.joda.time.Interval = > 2009-04-27T13:47:14.840/2009-04-28T13:47:14.840 (DateTime.now to DateTime.nextSecond).millis // returns Long = 1000 2.hours + 45.minutes + 10.seconds // returns com.github.nscala_time.time.DurationBuilder // (can be used as a Duration or as a Period) (2.hours + 45.minutes + 10.seconds).millis // returns Long = 9910000 2.months + 3.days // returns Period
Joda Time 是一个很好的 Java 库,在 豪尔赫 · 奥尔蒂斯创建的 Scala 时间上有一个可用于 Joda Time 的 Scala 包装器/隐式转换库。(注意隐含的性能会受到影响,但这取决于您是否会注意到。如果遇到性能问题,可以恢复到 Joda 接口)
自述:
USAGE: import org.scala_tools.time.Imports._ DateTime.now // returns org.joda.time.DateTime = 2009-04-27T13:25:42.659-07:00 DateTime.now.hour(2).minute(45).second(10) // returns org.joda.time.DateTime = 2009-04-27T02:45:10.313-07:00 DateTime.now + 2.months // returns org.joda.time.DateTime = 2009-06-27T13:25:59.195-07:00 DateTime.nextMonth < DateTime.now + 2.months // returns Boolean = true DateTime.now to DateTime.tomorrow // return org.joda.time.Interval = // 2009-04-27T13:47:14.840/2009-04-28T13:47:14.840 (DateTime.now to DateTime.nextSecond).millis // returns Long = 1000 2.hours + 45.minutes + 10.seconds // returns org.scala_tools.time.DurationBuilder // (can be used as a Duration or as a Period) (2.hours + 45.minutes + 10.seconds).millis // returns Long = 9910000 2.months + 3.days // returns Period
动机:
Java 日期和日历库在很大程度上是不够的。它们是可变的, 线程不安全,使用起来非常不方便。
Joda Time 库是 Java 日期和日历的一个很好的替代品 它们在默认情况下是不可变的,具有更丰富和更好的 API,并且 可以很容易地转换为 Java 的日期和日历类时,必要的。
这个项目为 Joda Time 提供了一层方便 类库,使它们在 Scala 中使用起来更加惯用。
(抄自 https://github.com/jorgeortiz85/scala-time)
每个人都使用 JodaTime,这些 Scala 助手/包装器库可能需要用新版本的 Scala 重新编译。Jodatime 是唯一一个已经存在很长时间的时间库,它是稳定的,并且可以可靠地与每个版本的 Scala 一起工作。
如果您使用的是 Java8,那么就没有必要再使用 nscala了。Joda-Time 库已经在 java.time包(JSR-310)下移动到 Java8中。只需将该包导入到 Scala 项目中即可。
nscala
java.time
在 Scala 中没有使用 标准处理日期的方法:
我会避免使用 java.util.Date,因为它有很好的文档说明。