Saltar al contenido

Cómo convertir una fecha hora string demasiado largo (UNIX Epoch Time) en Java 8 (Scala)

Te damos el arreglo a esta contratiempo, al menos eso creemos. Si tienes interrogantes puedes escribirlo en el apartado de comentarios y con placer te ayudaremos

Solución:

Puede utilizar el equivalente del siguiente código Java:

static long dateTimeStringToEpoch(String s, String pattern) 
    return DateTimeFormatter.ofPattern(pattern).withZone(ZoneOffset.UTC)
        .parse(s, p -> p.getLong(ChronoField.INSTANT_SECONDS));

Por supuesto, el procesamiento DateTimeFormatter.ofPattern(pattern).withZone(ZoneOffset.UTC) implica trabajo que podría evitarse al encontrarse con el mismo patrón string varias veces. Si esta cantidad de trabajo es relevante para su aplicación, depende de lo que se esté haciendo además de esta operación.

¿Puede probar este, según lo que ha dicho, está analizando la hora UTC, así que tengo esto como muestra?

Instant.parse("2019-01-24T12:48:14.530Z").getEpochSecond

Este es más de dos veces más corto (solo 3 llamadas de método):

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

Por cierto, construiría el DateTimeFormatter fuera de dateTimeStringToEpoch y 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 ejecutar una prueba de rendimiento, hay poca diferencia en el rendimiento (apenas un factor de 2) al inicializar el DateTimeFormatter fuera 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

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *