web-dev-qa-db-fra.com

Quelle est la manière habituelle de travailler avec les dates et les heures à Scala? Devrais-je utiliser les types Java ou il existe des alternatives Scala)?

Quelle est la manière habituelle de travailler avec les dates et les heures à Scala? Devrais-je utiliser Java des types tels que Java.util.Date ou des alternatives Scala)?

156
Ivan

À partir de Java SE 8 et plus, les utilisateurs sont invités à migrer vers Java.time (JSR-310). Des efforts sont en cours pour créer scala des bibliothèques recouvrant Java.time pour scala tel que scala-time . Si le ciblage est inférieur à SE 8, utilisez l'un des éléments ci-dessous. Voir aussi Pourquoi JSR-310 n'est pas Joda -Time


n nouveau Scala pour Joda Time . Ce projet a été créé à partir de scala-time, car il semble que scala-time ne soit plus maintenu.

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 est un bon Java bibliothèque, il existe une Scala bibliothèque de conversion implicite/implicite disponible pour Joda Time à scala-time créé par Jorge Ortiz . (Remarque: les performances ont un impact négatif sur les performances, mais cela dépend de ce que vous ferez si vous remarquerez. Et si vous rencontrez un problème de performances, vous pouvez simplement revenir à l'interface Joda)

Du 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

Si vous utilisez Java 8, il n'est plus nécessaire d'utiliser nscala. La bibliothèque Joda-Time a été déplacée dans Java 8 sous le Java.time package (JSR-310). Importez simplement ce paquet dans votre projet Scala.

11
user4380869

Il n'y a pas de façon standard de travailler avec des dates dans Scala. Les options disponibles sont:

  1. Utilisez Java.time (si vous utilisez Java 8) car il contient le meilleur du temps JODA. Aucune implication.
  2. Utilisez nscala-time.
  3. Lamma date library (bibliothèque relativement nouvelle sur les lieux)

J'éviterais d'utiliser Java.util.Date en raison des problèmes bien documentés qui l'entourent.

7
M.K.

MOTIVATION:

Les bibliothèques Java Date et Calendrier sont en grande partie inadéquates. Elles sont mutables, non thread-safe et très peu pratiques à utiliser.

La bibliothèque Joda Time est un excellent remplacement des classes de date et de calendrier de Java. Ils sont immuables par défaut, ont une API beaucoup plus riche et plus agréable, et peuvent facilement être convertis en classes Date et Calendar de Java si nécessaire.

Ce projet apporte une mince couche de commodité autour des bibliothèques Joda Time, ce qui les rend plus idiomatiques à utiliser dans Scala.

(copié de https://github.com/jorgeortiz85/scala-time )

5
Pavel Sklenak

Tout le monde utilise JodaTime. Ces bibliothèques d'assistants/wrappers Scala peuvent nécessiter une nouvelle compilation avec les nouvelles versions de Scala. Jodatime est la seule bibliothèque de temps qui existe depuis longtemps. Elle est stable et fonctionne de manière fiable avec toutes les versions de Scala.

3
irishjava