【问题标题】:Getting correct offset for timezone using current_timestamp in apache spark在 apache spark 中使用 current_timestamp 获取正确的时区偏移量
【发布时间】:2020-04-07 16:09:35
【问题描述】:

我是 Java 和 Apache spark 的新手,并试图了解时间戳和时区的使用。 我希望从我从 apache spark DF 获得的数据中将所有时间戳存储在 SQL Server 的 EST 时区中。

当我使用 current_timestamp 时,我得到了正确的 EST 时间,但是当我查看数据时得到的偏移量是“+00:00”而不是“-04:00”。

这是一个存储在数据库中的值,它是从 spark 数据集传入的: 2020-04-07 11:36:23.0220 +00:00

据我所知 current_timestamp 不接受任何时区。此外,时间是正确的(它是美国东部标准时间),但我不明白为什么偏移量是错误的。

任何帮助理解这一点都会很棒。

【问题讨论】:

    标签: java apache-spark


    【解决方案1】:

    Java Timestamps 或多或少与 Java 中的 LocalDateTime 一样工作 - 它们不包含时区信息。并且数据库将其解释为 UTC 时间戳。这就是为什么你有一个不匹配。我通常使用两种方法(取决于哪种更适合)

    1. 您可以从 Spark(使用简单的自定义 UDF)返回 UTC 时间戳,而不是使用特定于时区的 current_timestamp
    2. 您可以将日期编码为字符串 - 同样,使用 java.time API 您可以通过简单的 udf 实现这一目标

    希望现在情况更清楚了。

    【讨论】:

      【解决方案2】:

      如下所示,我将 UTC 默认值转换为 Localtimezone

      current_timestamp1 = current_timestamp(),
      current_timestamp2 = from_utc_timestamp(current_timestamp, "Australia/Sydney")
      

      【讨论】:

        猜你喜欢
        • 2013-07-17
        • 1970-01-01
        • 2020-12-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-01-09
        • 2012-11-28
        相关资源
        最近更新 更多