在火花 scala 中将时间戳列从 UTC 转换为 EST



我在时间戳类型的 Spark 数据帧中有一列,日期格式为"2019-06-13T11:39:10.244Z" 我的目标是将此列转换为 EST 时间(减去 4 小时(保持相同的格式。 我尝试使用 from_utc_timestamp api 进行过,但似乎它正在将 UTC 时间转换为我的本地时区(+5:30(并将其添加到时间戳中,然后从中减去 4 小时。我尝试使用 Joda 时间,但由于某种原因,它使 EST 时间增加了 33 天

输入 = 2019-06-13T11:39:10.244Z

使用 from_utc_timestamp API:

val tDf = df.withColumn("newTimeCol", to_utc_timestamp(col("timeCol"), "America/New_York"))

输出 = 2019-06-13T13:09:10.244Z+5:30

使用乔达时间包:

val coder : (String => String) = (arg: String) => {
new DateTime(arg, DateTimeZone.UTC).minusHours(4).toString("yyyy-mm-dd'T'HH:mm:s.SS'Z'")}
val sqlfunc = udf(coder)
val tDf = df.withColumn("newTime", sqlfunc(col("_c20")))

输出 = 2019-39-13T07:39:10.244Z

期望输出 = 2019-06-13T07:39:10.244Z

请告知我应该如何进行。提前致谢

创建输出时,格式字符串中存在拼写错误。

您的格式字符串应该是 yyyy-MM-dd'T'HH:mm:s.SS'Z',但它是 yyyy-mm-dd'T'HH:mm:s.SS'Z'。

mm是分钟的格式字符,而MM是月份的格式字符。您可以在此处检查所有格式字符。

最新更新