¿Cuál es la forma estándar de trabajar con fechas y horas en Scala? ¿Debo usar tipos Java como java.util.Date o hay alternativas nativas de Scala?¿Cuál es la forma estándar de trabajar con fechas y horas en Scala? ¿Debo usar tipos Java o hay alternativas nativas de Scala?
Respuesta
Desde Java SE 8 en adelante, los usuarios deben migrar a java.time (JSR-310). Hay esfuerzos para crear bibliotecas scala que envuelvan java.time para scala como scala-time. Si la orientación es inferior a SE 8, use una de las siguientes. También vea Why JSR-310 isn't Joda-Time
A new Scala wrapper for Joda Time. Este proyecto se bifurcó de scala-time ya que parece que el scala-time ya no se mantiene.
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 es una buena biblioteca de Java, hay un envoltorio Scala/implícita disponible biblioteca de conversión de Joda Time en scala-time creado por Jorge Ortiz. (Nota implícitos tienen un impacto en el rendimiento, pero depende de lo que haces si se dará cuenta y si llegas a tener un problema de rendimiento que sólo puede volver a la interfaz de Joda.)
Desde el 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
MOTIVACIÓN:
Las bibliotecas de fecha y calendario de Java son en gran parte inadecuadas. Son mutables, no son seguros para subprocesos y muy incómodos de usar.
La biblioteca Joda Time es un gran sustituto de las clases Date y Calendar de Java. Son inmutables por defecto, tienen una API mucho más rica y agradable, y se pueden convertir fácilmente a las clases de fecha y calendario de Java cuando sea necesario.
Este proyecto proporciona una fina capa de conveniencia alrededor de las bibliotecas Joda Time , haciéndolas más idiomáticas para usar dentro de Scala.
(copiado de https://github.com/jorgeortiz85/scala-time)
Todo el mundo utiliza JodaTime, estas bibliotecas Scala ayudante/envoltura puede ser necesario re-compilación con nuevas versiones de Scala. Jodatime es la única biblioteca de tiempo que existe desde hace mucho tiempo, y es estable y funciona de manera confiable con cada versión de Scala.
Si está utilizando Java 8, ya no es necesario utilizar nscala
. La biblioteca Joda-Time se ha movido a Java 8 en el paquete java.time
(JSR-310). Solo importa ese paquete en tu proyecto de Scala.
Eso no es verdad. Joda-Time-code tiene que ser migrado/ajustado cuando se cambia a Java-8 => dos API diferentes. –
No hay estándar manera de trabajar con las fechas en Scala. Las opciones disponibles son:
- Use java.time (si usa Java 8) ya que tiene el mejor tiempo JODA incorporado. Sin implicits.
- Use nscala-time.
- biblioteca fecha de Lamma (relativamente nueva biblioteca en la escena)
me gustaría evitar el uso de java.util.Date debido a los problemas bien documentados que lo rodean.
- 1. Trabajar con imágenes en Scala
- 2. ¿Cuál es la diferencia entre scala @Serializable y Java Serializable?
- 3. Trabajar con tuplas de Scala
- 4. ¿Cuál es la forma estándar de optimizar la recursión mutua en F #/Scala?
- 5. colección Scala práctica estándar
- 6. ¿Cuál es la forma preferida de usar las colecciones paralelas en Scala?
- 7. ¿Qué es un tipo decimal estándar en Scala 2.9?
- 8. Scala - Java =? (O Clojure -? = Java)
- 9. ¿Cuál es mejor framework Java/GWT o Scala/Lift?
- 10. ¿Debo preferir la clase sellada o la enumeración en Scala?
- 11. Scala: cómo trabajar con listas de parámetros de tipo largo
- 12. En Scala, ¿cuál es la diferencia entre usar `_` y usar un identificador con nombre?
- 13. tipos coincidentes en scala
- 14. ¿Cuál es la forma más fácil de implementar Scala PartialFunction en Java?
- 15. En Scala, ¿cuál es la diferencia entre Any y Object?
- 16. Tratar con fechas y horas en I
- 17. Java RMI con Scala, ¿es esto posible?
- 18. Al usar anotaciones de covarianza o límites genéricos en Scala
- 19. Scala, Java y la igualdad
- 20. Usar constantes de Scala en Java
- 21. ¿Cuál es la nueva forma de iterar sobre un mapa Java en Scala 2.8.0?
- 22. ¿Cuál es la forma correcta de codificar un ciclo de lectura en Scala?
- 23. ¿Cuál es la forma más fácil de usar reify (obtener un AST de) una expresión en Scala?
- 24. Scala: jaxb o similar?
- 25. Uso de tipos estructurales Scala con tipos abstractos
- 26. Scala pregunta inferencia de tipos
- 27. ¿Cuál es la forma correcta de usar scala.io.Source?
- 28. Comparaciones con los tipos numéricos de Scala?
- 29. ¿Cuál es la forma más rápida de sumar una colección en Scala
- 30. ¿Cuál es la mejor manera de usar decimales y fechas con búferes de protocolo?
Video scalaj: Idiomatic Scala Wrappers para Java Librerías http://days2010.scala-lang.org/node/138/164 – oluies
Gracias, no sé sobre este envoltorio. –
No puedo obtener un resultado formateado de esto. Si utilizo DateTime.formatted ("yyyyMMdd") me acaban de dar "yyyyMMdd" (letras no reemplazadas con los números correspondientes) como respuesta. Si uso DateTime.formatted (DateTimeFormat.forPattern ("yyyyMMdd")) - Obtengo un error al pedir un argumento de cadena. – Ivan