Qual é a maneira padrão de trabalhar com datas e horas no Scala? Devo usar tipos Java, como java.util.Date, ou existem alternativas nativas do Scala?
A partir do Java SE 8, os usuários são solicitados a migrar para o java.time (JSR-310). Há esforços na criação de bibliotecas scala que envolvem java.time para scala, como scala-time . Se a segmentação for inferior a SE 8, use uma das opções abaixo. Veja também Por que o JSR-310 não é Joda-Time
Um novo invólucro Scala para a Joda Time . Este projeto foi extraído 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
O Joda Time é uma boa biblioteca Java, existe uma biblioteca de conversão implícita / wrapper Scala disponível para o Joda Time no scala-time criado por Jorge Ortiz . (Nota: os implícitos têm um impacto no desempenho, mas isso depende do que você faz, se perceber. E se você encontrar um problema de desempenho, poderá reverter para a interface Joda)
No 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
Imports
escala.concurrent.duration._
. Em vez disso, usou o JodaTime simples e escreveu bicicletas próprias sobre ele.Se você estiver usando o Java 8, não será mais necessário usá-lo
nscala
. A biblioteca Joda-Time foi movida para o Java 8 nojava.time
pacote (JSR-310). Basta importar esse pacote para o seu projeto Scala.fonte
Não há uma maneira padrão de trabalhar com datas no Scala. As opções disponíveis são:
Eu evitaria usar o java.util.Date devido aos problemas bem documentados que o cercam.
fonte
MOTIVAÇÃO:
As bibliotecas Java Date e Calendar são em grande parte inadequadas. Eles são mutáveis, não são seguros para threads e são 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, possuem uma API muito mais rica e agradável e podem ser facilmente convertidos nas classes Date e Calendar do Java, quando necessário.
Este projeto fornece uma fina camada de conveniência nas bibliotecas Joda Time, tornando-as mais idiomáticas para uso no Scala.
(copiado de https://github.com/jorgeortiz85/scala-time )
fonte
Todo mundo usa o JodaTime, essas bibliotecas auxiliar / wrapper do Scala podem precisar de recompilação com as novas versões do Scala. O Jodatime é a única biblioteca de tempo que existe há muito tempo, e é estável e funciona de maneira confiável com todas as versões do Scala.
fonte