在Scala中使用日期和时间的标准方法是什么?我应该使用Java类型还是原生Scala替代品?

Iva*_*van 158 datetime scala jodatime

在Scala中使用日期和时间的标准方法是什么?我应该使用Java类型,如java.util.Date,还是有原生的Scala替代品?

olu*_*ies 125

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


Joda Time的新Scala包装器.这个项目从scala-time分叉,因为似乎不再维护scala-time.

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
Run Code Online (Sandbox Code Playgroud)

Joda Time是一个很好的Java库,有一个Scala包装器/隐式转换库可供Joda Time在Jala Ortiz创建的scala时间使用.(注意implicits会有性能损失,但这取决于你会注意到你做了什么.如果你遇到性能问题,你可以恢复到Joda接口)

来自README:

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
Run Code Online (Sandbox Code Playgroud)

  • 视频scalaj:用于Java库的惯用Scala Wrappers http://days2010.scala-lang.org/node/138/164 (4认同)

小智 11

如果您使用的是Java 8,则无需再使用nscala.Joda-Time库已经在java.time包(JSR-310)下移植到Java 8中.只需将该包导入Scala项目即可.


M.K*_*.K. 7

在Scala中没有使用日期的标准方法.可用的选项是:

  1. 使用java.time(如果您使用的是Java 8),因为它内置了最好的JODA时间.没有牵连.
  2. 使用nscala-time.
  3. 南丫日期库(现场相对较新的图书馆)

我会避免使用java.util.Date,因为它周围存在详细记录的问题.


小智 5

动机:

Java日期和日历库在很大程度上是不合适的.它们是可变的,不是线程安全的,并且使用起来非常不方便.

Joda Time库是Java日期和日历类的绝佳替代品.它们在默认情况下是不可变的,具有更丰富和更好的API,并且可以在必要时轻松转换为Java的Date和Calendar类.

这个项目为Joda Time库提供了一层薄薄的便利,使它们在Scala中使用更加惯用.

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