对时间戳值的 Scala 操作

RaA*_*aAm 0 scala apache-spark spark-dataframe

我有时间戳输入,基于某些条件,我需要使用 Scala 编程减去 1 秒或减去 3 个月

输入:

val date :String = "2017-10-31T23:59:59.000"
Run Code Online (Sandbox Code Playgroud)

输出:

减 1 秒

val lessOneSec = "2017-10-31T23:59:58.000"
Run Code Online (Sandbox Code Playgroud)

减 3 个月

val less3Mon   = "2017-07-31T23:59:58.000"
Run Code Online (Sandbox Code Playgroud)

如何将字符串值转换为时间戳并执行 Scala 编程中的减号等操作?

phi*_*ert 5

我假设您正在使用 Dataframes,因为您有 spark-dataframe 标签。

您可以使用 SQL INTERVAL 来减少时间,但您的列应该采用以下timestamp格式:

df.show(false)
+-----------------------+
|ts                     |
+-----------------------+
|2017-10-31T23:59:59.000|
+-----------------------+

import org.apache.spark.sql.functions._

df.withColumn("minus1Sec" , date_format($"ts".cast("timestamp") - expr("interval 1 second") , "yyyy-MM-dd'T'HH:mm:ss.SSS") )
  .withColumn("minus3Mon" , date_format($"ts".cast("timestamp") - expr("interval 3 month ") , "yyyy-MM-dd'T'HH:mm:ss.SSS") )
  .show(false)

+-----------------------+-----------------------+-----------------------+
|ts                     |minus1Sec              |minus3Mon              |
+-----------------------+-----------------------+-----------------------+
|2017-10-31T23:59:59.000|2017-10-31T23:59:58.000|2017-07-31T23:59:59.000|
+-----------------------+-----------------------+-----------------------+
Run Code Online (Sandbox Code Playgroud)