ti-enxame.com

Qual é a maneira padrão de trabalhar com datas e horários no Scala? Devo usar Java tipos ou existem alternativas nativasScala?

Qual é a maneira padrão de trabalhar com datas e horários no Scala? Devo usar Java tipos como o Java.util.Date ou existem alternativas nativasScala?

154
Ivan

Do Java SE 8 em diante, os usuários são solicitados a migrar para o Java.time (JSR-310). Há esforços na criação de bibliotecas scala envolvendo o Java.time para scala como scala-time . Se segmentar abaixo de SE 8, use um dos itens abaixo. Veja também Por que o JSR-310 não é o Joda-Time


m novo wrapper Scala para o Joda Time . Este projeto foi bifurcado a partir do scala-time, pois parece que o scala-time não é mais mantido.

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 é uma boa biblioteca Java, há um Scala biblioteca de conversão implícita/implícita disponível para Joda Time em scala-time criado por - Jorge Ortiz . (Observe que os implícitos têm um impacto no desempenho, mas depende do que você faz se você perceber. E se você tiver um problema de desempenho, você pode reverter para a interface do Joda)

Do 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

Se você estiver usando Java 8, então não há mais necessidade de usar nscala. A biblioteca Joda-Time foi movida para Java 8 no pacote Java.time (JSR-310). Apenas importe esse pacote para o seu projeto Scala.

11
user4380869

Não há padrão maneira de trabalhar com datas no Scala. As opções disponíveis são:

  1. Use Java.time (se você estiver usando Java 8), pois ele possui o melhor tempo de JODA embutido nele. Não há implícitos.
  2. Use nscala-time.
  3. Biblioteca de datas Lamma (biblioteca relativamente nova em cena)

Eu evitaria usar Java.util.Date devido aos problemas bem documentados que o cercam.

7
M.K.

MOTIVAÇÃO:

As bibliotecas Java Date e Calendar são amplamente inadequadas. Eles são mutáveis, não são thread-safe e muito inconvenientes de usar.

A biblioteca Joda Time é um ótimo substituto para as classes Date e Calendar do Java. Eles são imutáveis ​​por padrão, têm uma API muito mais rica e agradável e podem ser facilmente convertidos para as classes Date e Calendar do Java quando necessário.

Este projeto fornece uma fina camada de conveniência em torno das bibliotecas do Joda Time, tornando-as mais idiomáticas para uso dentro do Scala.

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

5
Pavel Sklenak

Todo mundo usa o JodaTime, essas bibliotecas auxiliares/wrapper Scala podem precisar de recompilação com novas versões do Scala. Jodatime é a única biblioteca de tempo que existe há muito tempo e é estável e funciona de forma confiável com todas as versões do Scala.

3
irishjava