web-dev-qa-db-ja.com

Scalaで日付と時刻を処理する標準的な方法は何ですか? Java型を使用する必要がありますか、それともネイティブScala代替がありますか?

Scalaで日付と時刻を処理する標準的な方法は何ですか? Java.util.DateなどのJava型を使用する必要がありますか、それともネイティブのScala代替がありますか?

156
Ivan

Java SE 8以降、ユーザーはJava.time(JSR-310)に移行するよう求められます。 scala-time など、scalaの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

Joda Time は優れたJavaライブラリで、Jodaで利用可能なScalaラッパー/暗黙の変換ライブラリがあります scala-time の時間 Jorge Ortiz によって作成されました。 (暗黙的にパフォーマンスが低下することに注意してください。ただし、気付くかどうかによって異なります。パフォーマンスの問題が発生した場合は、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
122
oluies

Java 8を使用している場合、nscalaを使用する必要はありません。 Joda-Timeライブラリは、Java.timeパッケージ(JSR-310)の下のJava 8に移動されました。そのパッケージをScalaプロジェクトにインポートするだけです。

11
user4380869

Scalaで日付を操作する標準の方法はありません。利用可能なオプションは次のとおりです。

  1. Java.timeを使用します(Java 8を使用している場合)。最高のJODA時間が組み込まれているためです。暗黙的ではありません。
  2. Nscala-timeを使用します。
  3. ラマ日付ライブラリ(現場の比較的新しいライブラリ)

Java.util.Dateを使用することは、それを取り巻く十分に文書化された問題のために使用することを避けます。

7
M.K.

動機:

Java DateおよびCalendarライブラリは、ほとんど不十分です。それらは変更可能で、スレッドセーフではなく、使用するのに非常に不便です。

Joda Timeライブラリは、JavaのDateクラスとCalendarクラスの優れた代替品です。デフォルトでは不変であり、より豊富で優れたAPIを備えており、必要に応じてJavaのDateクラスとCalendarクラスに簡単に変換できます。

このプロジェクトは、Joda Timeライブラリの周囲に利便性の薄いレイヤーを提供し、Scala内での使用をより慣用的にします。

https://github.com/jorgeortiz85/scala-time からコピー)

5
Pavel Sklenak

誰もがJodaTimeを使用しています。これらのScalaヘルパー/ラッパーライブラリは、Scalaの新しいバージョンで再コンパイルする必要がある場合があります。 Jodatimeは、長い間使用されている唯一のタイムライブラリであり、安定しており、Scalaのすべてのバージョンで確実に動作します。

3
irishjava