Каков стандартный способ работы с датами и временем в Scala? Должен ли я использовать типы Java или существуют собственные альтернативы Scala?

Какой стандартный способ работы с датами и временем в Scala? Должен ли я использовать типы Java, такие как java.util.Date, или существуют собственные альтернативы Scala?

Ответ 1

Начиная с Java SE 8, пользователям предлагается перейти на java.time(JSR-310). Усилия по созданию scala библиотек завершают java.time для scala, например scala-time. Если таргетинг ниже SE 8 используется один из ниже. Также см. Почему JSR-310 не является Joda-Time


Новая оболочка scala для Joda Time. Этот проект развивается из 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, существует scala обертка/неявная библиотека преобразования, доступная для Joda Time в scala-time, созданный Хорхе Ортис. (Обратите внимание, что импликации имеют производительность, но это зависит от того, что вы делаете, если заметите. И если вы столкнулись с проблемой производительности, вы можете просто вернуться к интерфейсу 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

Ответ 2

Если вы используете Java 8, то больше не нужно использовать nscala. Библиотека Joda-Time была перенесена в Java 8 в пакете java.time (JSR-310). Просто импортируйте этот пакет в проект Scala.

Ответ 3

Нет стандартного способа работы с датами в Scala. Доступны следующие опции:

  • Используйте java.time(если вы используете Java 8), поскольку он имеет лучшее из времени JODA, встроенного в него. Не подразумевается.
  • Использовать nscala-time.
  • Lamma date library (относительно новая библиотека на сцене)

Я бы не использовал java.util.Date из-за хорошо документированных проблем, связанных с ним.

Ответ 4

МОТИВАЦИЯ:

Библиотеки Java Date и Calendar в основном неадекватны. Они изменяемы, небезопасным потоком и очень неудобным в использовании.

Библиотека времени Joda - отличная замена для Java Date и Calendar классы. Они по умолчанию неизменяемы, имеют гораздо более богатый и приятный API, и могут быть легко преобразованы в классы Java Date и Calendar при необходимости.

Этот проект обеспечивает тонкий уровень удобства вокруг времени Джоды библиотеки, что делает их более идиоматичными для использования в Scala.

(скопировано из https://github.com/jorgeortiz85/scala-time)

Ответ 5

Каждый использует JodaTime, эти библиотеки Scala helper/wrapper могут нуждаться в повторной компиляции с новыми версиями Scala. Jodatime - единственная библиотека времени, которая существует уже давно и стабильна и надежно работает с каждой версией Scala.