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

Convert timestamp column from UTC to EST in spark scala

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

innput = 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

使用 Joda 时间包:

   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 是月份的格式字符。您可以检查所有格式字符 here.