WedX - журнал о программировании и компьютерных науках

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

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

01.09.2010

Ответы:


1

Начиная с 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
01.09.2010
  • Видео scalaj: Идиоматические оболочки Scala для библиотек Java days2010.scala-lang.org/node/138 / 164 01.09.2010
  • Спасибо, я не знаю об этой обертке. 01.09.2010
  • Я не могу получить отформатированный вывод из этого. Если я использую DateTime.formatted (yyyyMMdd), я просто получаю простой yyyyMMdd (буквы не заменяются соответствующими числами) в качестве ответа. Если я использую DateTime.formatted (DateTimeFormat.forPattern (yyyyMMdd)) - я получаю сообщение об ошибке с запросом строкового аргумента. 03.09.2010
  • stackoverflow.com/questions/3639944/ 04.09.2010
  • Поскольку кажется, что scala-time больше не поддерживается, он был заменен nscala-time (который в отличие от scala-time работает с scala 2.10). Его можно найти по адресу github.com/nscala-time/nscala-time. 07.03.2013
  • Не могу понять, в чем проблема с их Imports и scala.concurrent.duration._. Вместо этого использовал обычный JodaTime и написал поверх него собственные велосипеды. 19.02.2014

  • 2

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

    04.02.2015
  • Это неправда. При переходе на Java-8 необходимо перенести / отрегулировать Joda-Time-code = ›два разных API! 30.03.2017

  • 3

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

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

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

    02.04.2015

    4

    МОТИВАЦИЯ:

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

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

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

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

    08.01.2013

    5

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

    15.07.2013
    Новые материалы

    Как проанализировать работу вашего классификатора?
    Не всегда просто знать, какие показатели использовать С развитием глубокого обучения все больше и больше людей учатся обучать свой первый классификатор. Но как только вы закончите..

    Работа с цепями Маркова, часть 4 (Машинное обучение)
    Нелинейные цепи Маркова с агрегатором и их приложения (arXiv) Автор : Бар Лайт Аннотация: Изучаются свойства подкласса случайных процессов, называемых дискретными нелинейными цепями Маркова..

    Crazy Laravel Livewire упростил мне создание электронной коммерции (панель администратора и API) [Часть 3]
    Как вы сегодня, ребята? В этой части мы создадим CRUD для данных о продукте. Думаю, в этой части я не буду слишком много делиться теорией, но чаще буду делиться своим кодом. Потому что..

    Использование машинного обучения и Python для классификации 1000 сезонов новичков MLB Hitter
    Чему может научиться машина, глядя на сезоны новичков 1000 игроков MLB? Это то, что исследует это приложение. В этом процессе мы будем использовать неконтролируемое обучение, чтобы..

    Учебные заметки: создание моего первого пакета Node.js
    Это мои обучающие заметки, когда я научился создавать свой самый первый пакет Node.js, распространяемый через npm. Оглавление Глоссарий I. Новый пакет 1.1 советы по инициализации..

    Забудьте о Matplotlib: улучшите визуализацию данных с помощью умопомрачительных функций Seaborn!
    Примечание. Эта запись в блоге предполагает базовое знакомство с Python и концепциями анализа данных. Привет, энтузиасты данных! Добро пожаловать в мой блог, где я расскажу о невероятных..

    ИИ в аэрокосмической отрасли
    Каждый полет – это шаг вперед к великой мечте. Чтобы это происходило в их собственном темпе, необходима команда астронавтов для погони за космосом и команда технического обслуживания..


    Для любых предложений по сайту: [email protected]