166 votes

Quelle est la méthode standard pour travailler avec des dates et des heures en Scala ? Dois-je utiliser des types Java ou existe-t-il des alternatives natives à Scala ?

Quelle est la méthode standard pour travailler avec des dates et des heures en Scala ? Dois-je utiliser des types Java tels que java.util.Date ou existe-t-il des alternatives natives à Scala ?

133voto

oluies Points 7682

À partir de Java SE 8, les utilisateurs sont invités à migrer vers java.time (JSR-310). Des efforts sont faits pour créer des bibliothèques scala enveloppant java.time pour scala telles que scala-time . Si la cible est inférieure à SE 8, utilisez l'une des méthodes ci-dessous. Voir aussi Pourquoi JSR-310 n'est pas Joda-Time

Superbe Scala liste de nombreuses apis Scala DateTime populaires


Un nouveau wrapper Scala pour Joda Time . Ce projet a bifurqué 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 une bonne bibliothèque Java, il existe un wrapper Scala / une bibliothèque de conversion implicite disponible pour Joda Time à l'adresse suivante scala-time créé par Jorge Ortiz . (Notez que les implicites ont un impact sur les performances, mais cela dépend de ce que vous faites et si vous le remarquez. Et si vous rencontrez un problème de performance, vous pouvez simplement revenir à l'interface Joda).

Dans le fichier 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

4 votes

Video scalaj : des wrappers Scala idiomatiques pour les librairies Java days2010.scala-lang.org/node/138/164

0 votes

Merci, je ne connaissais pas cet emballage.

0 votes

Je n'arrive pas à obtenir une sortie formatée à partir de ça. Si j'utilise DateTime.formatted("yyyyMMdd"), j'obtiens simplement "yyyyMMdd" (lettres non remplacées par les chiffres correspondants) comme réponse. Si j'utilise DateTime.formatted(DateTimeFormat.forPattern("yyyyMMdd")) - j'obtiens une erreur demandant un argument de type chaîne.

13voto

Si vous utilisez Java 8, il n'est pas nécessaire d'utiliser la fonction nscala plus. La bibliothèque Joda-Time a été déplacée dans Java 8 sous le nom de java.time (JSR-310). Il suffit d'importer ce paquet dans votre projet Scala.

8voto

I.K. Points 1262

Il n'y a pas standard manière de travailler avec des dates en Scala. Les options disponibles sont les suivantes :

  1. Utilisez java.time (si vous utilisez Java 8) car il intègre le meilleur de JODA time. Pas d'implicites.
  2. Utilisez nscala-time.
  3. Bibliothèque de la date de Lamma (bibliothèque relativement nouvelle sur la scène)

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

5voto

Pavel Sklenak Points 31

MOTIVATION :

Les bibliothèques Java Date et Calendar sont largement insuffisantes. Elles sont mutables, non thread-safe, et très peu pratiques à utiliser.

La bibliothèque Time de Joda remplace avantageusement la date et le calendrier de Java. de Java. Elles sont immuables par défaut, disposent d'une API beaucoup plus riche et plus agréable, et peuvent facilement être converties en classes de dates et de calendriers de Java si nécessaire.

Ce projet fournit une fine couche de commodité autour du Joda Time afin de les rendre plus faciles à utiliser dans Scala.

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

3voto

irishjava Points 145

Tout le monde utilise JodaTime, ces bibliothèques d'aide/emballage Scala peuvent nécessiter une recompilation 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.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X