Cómo convertir una cadena de fecha y hora a la larga (Unix Epoch Time) en Java 8 (Scala)

samthebest:

Quiero que el tiempo Unix Epoch (Tiempo de POSIX, Unix Time) de una cadena en algunos pattern, la cadena está en formato normal (por lo GMT). Por favor, usando Java 8, no Joda o viejo Java.

(Por favor, consulte los milisegundos Cómo convertir una cadena de fecha y hora a la larga (Unix Epoch Time) milisegundos en Java 8 (Scala) )

Hasta ahora tengo el siguiente, pero no me gusta esto por un número de razones:

  1. Es demasiado detallado de lo que es la cosa más común que ver con las fechas (convertir a Unix Epoch Time). 7 método llama para lo que debería ser 1.
  2. Se tiene que especificar UTC, pero seguramente UTC es sólo un defecto, ¿por qué tengo que ser explícita aquí?
  3. Tiene un literal de cadena "UTC"
  4. Tiene un número mágico ZoneOffset.ofHours(0)

Mi mejor hasta el momento:

def dateTimeStringToEpoch(s: String, pattern: String): Long = 
    LocalDateTime.parse(s, DateTimeFormatter.ofPattern(pattern))
      .atZone(ZoneId.ofOffset("UTC", ZoneOffset.ofHours(0)))
      .toInstant().getEpochSeconds

Además, pregunta extra, ¿es eficiente? ¿Hay alguna sobrecarga para la creación de la DateTimeFormattervía DateTimeFormatter.ofPattern(pattern)? Si es así ¿por qué?

ETO:

Este es más de dos veces más cortas ( sólo 3 llamadas de método ):

def dateTimeStringToEpoch(s: String, pattern: String): Long = 
     LocalDateTime.parse(s, DateTimeFormatter.ofPattern(pattern))
                  .toEpochSecond(ZoneOffset.UTC)

Por cierto, me gustaría construir el DateTimeFormatterexterior dateTimeStringToEpochy pasarlo como un parámetro de método:

def dateTimeStringToEpoch(s: String, formatter: DateTimeFormatter): Long = 
     LocalDateTime.parse(s, formatter).toEpochSecond(ZoneOffset.UTC)

Después de haber hecho ejecutar una prueba de rendimiento, hay poca diferencia en el rendimiento (apenas un factor de 2) en la inicialización de la DateTimeFormatterfuera del método.

scala> val pattern = "yyyy/MM/dd HH:mm:ss"
pattern: String = yyyy/MM/dd HH:mm:ss

scala>   time(() => randomDates.map(dateTimeStringToEpoch(_, pattern)))
Took: 1216

scala>   time(() => randomDates.map(dateTimeStringToEpochFixed))
Took: 732

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=173077&siteId=1
Recomendado
Clasificación