【问题标题】:Convert timestamp column from UTC to EST in spark scala在 spark scala 中将时间戳列从 UTC 转换为 EST
【发布时间】:2020-04-03 23:45:03
【问题描述】:

我在时间戳类型的 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

使用 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

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

【问题讨论】:

    标签: scala dataframe apache-spark jodatime utc


    【解决方案1】:

    创建输出时,格式字符串中有错字。

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-16
      • 2021-10-27
      • 2021-11-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多