Какой стандартный способ работы с датой и временем в Scala? Должен ли я использовать типы Java, такие как java.util.Date, или есть собственные альтернативы Scala?
Какой стандартный способ работы с датой и временем в Scala? Должен ли я использовать типы Java или есть альтернативы для Scala?
Ответы:
Начиная с Java SE 8, пользователям предлагается перейти на java.time (JSR-310). Существуют усилия по созданию библиотек scala, обертывающих java.time для scala, таких как scala-time. Если нацеливание ниже SE 8, воспользуйтесь одним из следующих. Также см. Почему JSR-310 не Joda -Время
Awesome scala перечисляет многие из популярных API-интерфейсов Scala DateTime.
Новая оболочка 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, для Joda Time доступна оболочка Scala / библиотека неявного преобразования. в 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
Если вы используете Java 8, больше нет необходимости использовать nscala
. Библиотека Joda-Time была перенесена в Java 8 в составе пакета java.time
(JSR-310). Просто импортируйте этот пакет в свой проект Scala.
В Scala нет стандартного способа работы с датами. Доступны следующие варианты:
- Используйте java.time (если вы используете Java 8), поскольку в него встроено лучшее время JODA. Никаких скрытых явлений.
- Используйте nscala-time.
- Библиотека дат Lamma (относительно новая библиотека на сцене)
Я бы избегал использования java.util.Date из-за хорошо задокументированных проблем, связанных с ним.
МОТИВАЦИЯ:
Библиотеки даты и календаря Java в значительной степени неадекватны. Они изменяемы, не ориентированы на многопотоковое исполнение и очень неудобны в использовании.
Библиотека Joda Time - отличная замена Java-классам Date и Calendar. По умолчанию они неизменяемы, имеют гораздо более богатый и приятный API и могут быть легко преобразованы в классы Java Date и Calendar при необходимости.
Этот проект обеспечивает тонкий слой удобства для библиотек Joda Time, что делает их более идиоматичными для использования в Scala.
(скопировано с https://github.com/jorgeortiz85/scala-time)
Все используют JodaTime, этим вспомогательным библиотекам / оболочкам Scala может потребоваться перекомпиляция с новыми версиями Scala. Jodatime - единственная библиотека времени, которая существует уже давно, стабильна и надежно работает со всеми версиями Scala.
Imports
иscala.concurrent.duration._
. Вместо этого использовал обычный JodaTime и написал поверх него собственные велосипеды. 19.02.2014