Получить продолжительность в scala - PullRequest
0 голосов
/ 07 августа 2020

У меня есть переменная, состоящая из date_time. Теперь я хочу получить разницу в часах для этого date_time с current_time. Как лучше всего добиться этого в scala?

val create_time = "2020-08-05 10:10:10"

Предположим, если current_time выглядит следующим образом:

val current_time = "2020-08-06 10:10:10"

Теперь я ожидаю продолжительность в часах. Я могу добиться этого, используя искровые кадры данных, используя to_timestamp(), но хочу посмотреть, как мы можем это сделать в scala.

val df = Seq(("2020-08-01 12:01:19"), ("2020-08-05 12:01:19"), ("2020-08-06 16:44:55"), ("2020-08-06 16:50:59")).toDF("input_timestamp")


df.withColumn("input_timestamp", to_timestamp(col("input_timestamp")))
  .withColumn("current_timestamp", current_timestamp().as("current_timestamp"))
  .withColumn("DiffInSeconds", current_timestamp().cast(LongType) - col("input_timestamp").cast(LongType)) 
  .withColumn("DiffInHours",col("DiffInSeconds")/3600D)
  .withColumn("DiffInDays",round(col("DiffInHours")/24)).show(false)


+-------------------+-----------------------+-------------+------------------+----------+
|input_timestamp    |current_timestamp      |DiffInSeconds|DiffInHours       |DiffInDays|
+-------------------+-----------------------+-------------+------------------+----------+
|2020-08-01 12:01:19|2020-08-06 20:25:14.775|462235       |128.3986111111111 |5.0       |
|2020-08-05 12:01:19|2020-08-06 20:25:14.775|116635       |32.39861111111111 |1.0       |
|2020-08-06 16:44:55|2020-08-06 20:25:14.775|13219        |3.6719444444444442|0.0       |
|2020-08-06 16:50:59|2020-08-06 20:25:14.775|12855        |3.5708333333333333|0.0       |
+-------------------+-----------------------+-------------+------------------+----------+

Ответы [ 2 ]

1 голос
/ 07 августа 2020

Scala раствор.

import java.time.LocalDateTime
import java.time.format.DateTimeFormatter
import java.time.temporal.ChronoUnit.HOURS

val start = LocalDateTime.parse("2020-08-05 10:10:10"
              ,DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))
val stop  = LocalDateTime.now  //current_time

val between = HOURS.between(start, stop)
//between: Long = 32
0 голосов
/ 07 августа 2020

Похоже, стандартный способ справиться со временем и разницей во времени - это Java время , если вы используете Java 8 и далее.

Связанное сообщение о переполнении стека:

Какой стандартный способ работы с датой и временем в Scala? Должен ли я использовать типы Java или есть собственные альтернативы Scala?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...