Scalaで日付と時刻を扱う標準的な方法は何ですか? java.util.Date などの Java 型を使用する必要がありますか、それともネイティブな Scala の代替手段がありますか?
5 に答える
Java SE 8 以降、ユーザーは java.time (JSR-310) に移行するよう求められます。scala-timeなどの scala の java.time をラップする scala ライブラリを作成する取り組みがあります。SE 8 未満をターゲットにする場合は、以下のいずれかを使用します。JSR-310 が Joda-Time ではない理由も参照してください。
素晴らしい scalaには、人気のある Scala DateTime API の多くがリストされています
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 ライブラリです。Jorge Ortizによって作成されたscala-time のJoda Time で使用できる Scala ラッパー/暗黙的な変換ライブラリがあります。(インプリシットはパフォーマンスに影響を与えることに注意してください。しかし、それはあなたが何をするかにかかっていることに注意してください。また、パフォーマンスの問題に遭遇した場合は、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
Java 8 を使用している場合は、nscala
もう使用する必要はありません。Joda-Time ライブラリは、java.time
パッケージ (JSR-310) の下で Java 8 に移動されました。そのパッケージを Scala プロジェクトにインポートするだけです。
Scala で日付を操作する標準的な方法はありません。利用可能なオプションは次のとおりです。
- 最高の JODA 時間が組み込まれているため、java.time (Java 8 を使用している場合) を使用します。暗黙的なものはありません。
- nscala-time を使用します。
- ラマデート図書館(現場では比較的新しい図書館)
java.util.Date に関する問題が十分に文書化されているため、私は java.util.Date の使用を避けます。
動機:
Javaの日付とカレンダーのライブラリはほとんど不十分です。それらは変更可能であり、スレッドセーフではなく、使用するのに非常に不便です。
Joda Timeライブラリは、JavaのDateクラスとCalendarクラスの優れた代替品です。これらはデフォルトで不変であり、はるかに豊富で優れたAPIを備えており、必要に応じてJavaのDateクラスとCalendarクラスに簡単に変換できます。
このプロジェクトは、Joda Timeライブラリーの周りに便利な薄い層を提供し、Scala内で使用するための慣用的なものにします。
誰もが JodaTime を使用しています。これらの Scala ヘルパー/ラッパー ライブラリは、Scala の新しいバージョンで再コンパイルする必要がある場合があります。Jodatime は、長い間使用されてきた唯一の時間ライブラリであり、安定しており、Scala のすべてのバージョンで確実に動作します。