Spark:将 GMT 时间戳转换为东部时间,同时考虑夏令时
Spark: converting GMT time stamps to Eastern taking daylight savings into account
我正在尝试将一列 GMT 时间戳字符串转换为一列东部时区的时间戳。我想考虑夏令时。
我的时间戳字符串列如下所示:
'2017-02-01T10:15:21+00:00'
我想出了如何将字符串列转换为 EST 中的时间戳:
from pyspark.sql import functions as F
df2 = df1.withColumn('datetimeGMT', df1.myTimeColumnInGMT.cast('timestamp'))
df3 = df2.withColumn('datetimeEST', F.from_utc_timestamp(df2.datetimeGMT, "EST"))
但是时间不会随着夏令时而改变。是否有其他功能或其他功能可以通过转换时间戳来解释夏令时?
编辑:我想我明白了。在上面的 from_utc_timestamp 调用中,我需要使用 "America/New_York" 而不是 "EST":
df3 = df2.withColumn('datetimeET', F.from_utc_timestamp(df2.datetimeGMT, "America/New_York"))
我最终找到了答案,所以我想我会把它添加到这里。我还认为这个 question/answer 是值得的,因为当我在发布问题之前搜索这个问题时,我找不到任何关于 spark 夏令时的信息。我可能应该意识到我应该搜索底层的 java 函数。
问题的答案最终是使用字符串 "America/New_York" 而不是 "EST"。这正确地应用了夏令时。
from pyspark.sql import functions as F
df3 = df2.withColumn('datetimeET', F.from_utc_timestamp(df2.datetimeGMT, "America/New_York"))
编辑:
此 link 显示可用时区字符串列表,可按此方式使用:https://garygregory.wordpress.com/2013/06/18/what-are-the-java-timezone-ids/
我正在尝试将一列 GMT 时间戳字符串转换为一列东部时区的时间戳。我想考虑夏令时。
我的时间戳字符串列如下所示:
'2017-02-01T10:15:21+00:00'
我想出了如何将字符串列转换为 EST 中的时间戳:
from pyspark.sql import functions as F
df2 = df1.withColumn('datetimeGMT', df1.myTimeColumnInGMT.cast('timestamp'))
df3 = df2.withColumn('datetimeEST', F.from_utc_timestamp(df2.datetimeGMT, "EST"))
但是时间不会随着夏令时而改变。是否有其他功能或其他功能可以通过转换时间戳来解释夏令时?
编辑:我想我明白了。在上面的 from_utc_timestamp 调用中,我需要使用 "America/New_York" 而不是 "EST":
df3 = df2.withColumn('datetimeET', F.from_utc_timestamp(df2.datetimeGMT, "America/New_York"))
我最终找到了答案,所以我想我会把它添加到这里。我还认为这个 question/answer 是值得的,因为当我在发布问题之前搜索这个问题时,我找不到任何关于 spark 夏令时的信息。我可能应该意识到我应该搜索底层的 java 函数。
问题的答案最终是使用字符串 "America/New_York" 而不是 "EST"。这正确地应用了夏令时。
from pyspark.sql import functions as F
df3 = df2.withColumn('datetimeET', F.from_utc_timestamp(df2.datetimeGMT, "America/New_York"))
编辑:
此 link 显示可用时区字符串列表,可按此方式使用:https://garygregory.wordpress.com/2013/06/18/what-are-the-java-timezone-ids/