对 TimeStamp 值的 Scala 操作
Scala Operation on TimeStamp values
我在时间戳中有输入,基于某些条件我需要使用 scala 编程减去 1 秒或减去 3 个月
输入:
val date :String = "2017-10-31T23:59:59.000"
输出:
减去 1 秒
val lessOneSec = "2017-10-31T23:59:58.000"
负 3 个月
val less3Mon = "2017-07-31T23:59:58.000"
如何将字符串值转换为时间戳,并在scala编程中进行减号之类的操作?
查看 jodatime 库。它具有从时间戳中减去秒数或月数所需的所有 API
http://www.joda.org/joda-time/
sbt 依赖
"joda-time" % "joda-time" % "2.9.9"
我假设您正在使用 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|
+-----------------------+-----------------------+-----------------------+
试试下面的代码
val yourDate = "2017-10-31T23:59:59.000"
val formater = DateTimeFormat.forPattern("yyyy-MM-dd'T'HH:mm:ss.SSS")
val date = LocalDateTime.parse(yourDate, formater)
println(date.minusSeconds(1).toString(formater))
println(date.minusMonths(3).toString(formater))
Output
2017-10-31T23:59:58.000
2017-07-31T23:59:59.000
我在时间戳中有输入,基于某些条件我需要使用 scala 编程减去 1 秒或减去 3 个月
输入:
val date :String = "2017-10-31T23:59:59.000"
输出:
减去 1 秒
val lessOneSec = "2017-10-31T23:59:58.000"
负 3 个月
val less3Mon = "2017-07-31T23:59:58.000"
如何将字符串值转换为时间戳,并在scala编程中进行减号之类的操作?
查看 jodatime 库。它具有从时间戳中减去秒数或月数所需的所有 API
http://www.joda.org/joda-time/
sbt 依赖
"joda-time" % "joda-time" % "2.9.9"
我假设您正在使用 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|
+-----------------------+-----------------------+-----------------------+
试试下面的代码
val yourDate = "2017-10-31T23:59:59.000"
val formater = DateTimeFormat.forPattern("yyyy-MM-dd'T'HH:mm:ss.SSS")
val date = LocalDateTime.parse(yourDate, formater)
println(date.minusSeconds(1).toString(formater))
println(date.minusMonths(3).toString(formater))
Output
2017-10-31T23:59:58.000
2017-07-31T23:59:59.000