在Scala中使用date和时间的标准方式是什么? 我应该使用Javatypes还是有本地Scala替代品?

在Scala中使用date和时间的标准方式是什么? 我应该使用Javatypes,如java.util.Date还是有本地Scala替代品?

从Java SE 8开始,用户被要求迁移到java.time(JSR-310)。 我们正在努力创buildscala库,它包装了诸如scala-time之类的scala的 java.time。 如果目标低于SE 8,则使用以下之一。 另请参阅为什么JSR-310不是Joda-Time


Joda Time的一个新的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库, Jorge Ortiz创build的Scala 时间里有一个可用于Joda Time的Scala包装器/隐式转换库。 (注意implicits有一个性能问题,但是这取决于你做什么,如果你会注意到的话,如果遇到性能问题,你可以回到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 8,那么就没有必要再使用nscala了。 Joda-Time库已经被移植到java.time包(JSR-310)下的Java 8中。 只需将该包导入Scala项目。

在Scala中使用date没有标准的方法。 可用的选项是:

  1. 使用java.time(如果您使用的是Java 8),因为它具有内置的最佳JODA时间。 没有暗示。
  2. 使用nscala-time。
  3. 南丫岛date图书馆(现场比较新的图书馆)

我会避免使用java.util.Date由于周围的logging完善的问题。

动机:

Javadate和日历库在很大程度上是不够的。 它们是可变的,不是线程安全的,使用起来非常不方便。

Joda时间库是Javadate和日历类的很好的替代品。 它们默认是不可变的,具有更丰富和更好的API,并且在必要时可以很容易地转换为Java的Date和Calendar类。

这个项目为Joda时间库提供了一个简单的方便,使它们在Scala中更加通用。

(从https://github.com/jorgeortiz85/scala-time复制);

每个人都使用JodaTime,这些Scala辅助器/包装器库可能需要重新编译新版本的Scala。 Jodatime是唯一一个已经存在了很长一段时间的库,并且稳定可靠地运行在每个版本的Scala上。