2010-09-01 7 views

Respuesta

110

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 
+4

Video scalaj: Idiomatic Scala Wrappers para Java Librerías http://days2010.scala-lang.org/node/138/164 – oluies

+0

Gracias, no sé sobre este envoltorio. –

+0

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

5

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)

3

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.

8

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.

+1

Eso no es verdad. Joda-Time-code tiene que ser migrado/ajustado cuando se cambia a Java-8 => dos API diferentes. –

6

No hay estándar manera de trabajar con las fechas en Scala. Las opciones disponibles son:

  1. Use java.time (si usa Java 8) ya que tiene el mejor tiempo JODA incorporado. Sin implicits.
  2. Use nscala-time.
  3. 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.

Cuestiones relacionadas