gpt4 book ai didi

scala - 将 UTC unix 时间转换为同一时区的时间戳

转载 作者:行者123 更新时间:2023-12-02 16:20:41 25 4
gpt4 key购买 nike

我想将 epoc 字段转换为 UTC 时间戳,我正在使用下面的代码。

df.withColumn(
TargetColumn,
to_timestamp(from_unixtime(col(SourceColumn) / 1000), "yyyy-MM-dd HH:mm:ss")

SourceColumn 的示例值为 1580452395095L,它应该产生 2020-01-31 06:33:15.0然而,当我尝试这段代码时,它给出了 2020-01-31 07:33:15.0

似乎 to_timestamp 函数使用系统的本地时区,我什至尝试将 spark timezone 设置为

spark.conf.set("spark.sql.session.timeZone", "UTC")

但这也行不通,有没有办法让这段代码始终转换为 UTC 时间戳,而不管它运行在什么环境下?

最佳答案

在配置中设置时区应该可以解决这个问题。实际上在配置中的任何地方设置 "spark.sql.session.timeZone", "UTC" 应该是可行的。

val spark = SparkSession.builder()
.appName("test")
.master("local")
.config("spark.sql.session.timeZone", "UTC").getOrCreate()

import spark.implicits._

val df = Seq(
(1580452395095L)
).toDF("DATE")

df.withColumn("NEW_DATE",
to_timestamp(from_unixtime(col("DATE") / 1000), "yyyy-MM-dd HH:mm:ss"))
.show(false)

输出:

+-------------+-------------------+
|DATE |NEW_DATE |
+-------------+-------------------+
|1580452395095|2020-01-31 06:33:15|
+-------------+-------------------+

不设置时区,我们得到

+-------------+-------------------+
|DATE |NEW_DATE |
+-------------+-------------------+
|1580452395095|2020-01-31 07:33:15|
+-------------+-------------------+

关于scala - 将 UTC unix 时间转换为同一时区的时间戳,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65579276/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com