在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没有标准的方法。 可用的选项是:
- 使用java.time(如果您使用的是Java 8),因为它具有内置的最佳JODA时间。 没有暗示。
- 使用nscala-time。
- 南丫岛date图书馆(现场比较新的图书馆)
我会避免使用java.util.Date由于周围的logging完善的问题。
动机:
Javadate和日历库在很大程度上是不够的。 它们是可变的,不是线程安全的,使用起来非常不方便。
Joda时间库是Javadate和日历类的很好的替代品。 它们默认是不可变的,具有更丰富和更好的API,并且在必要时可以很容易地转换为Java的Date和Calendar类。
这个项目为Joda时间库提供了一个简单的方便,使它们在Scala中更加通用。
每个人都使用JodaTime,这些Scala辅助器/包装器库可能需要重新编译新版本的Scala。 Jodatime是唯一一个已经存在了很长一段时间的库,并且稳定可靠地运行在每个版本的Scala上。