首页 > 解决方案 > 如何在 Python 中将具有给定 UTC 偏移量的日期时间字符串转换为具有更窄 UTC 偏移量的等效日期时间

问题描述

我有一个 Python Databricks 笔记本,它获取具有日期时间字符串的外部数据,其 UTC 偏移量在 UTC-24:00 和 UTC+24:00 之间。示例日期时间字符串是“ 2020-06-26T03:05:52+20:00”。但是,我还使用了一个仅支持 UTC-18:00 和 UTC+18:00 之间的 UTC 偏移量的库(Spark 3.x 使用 Java DateTimeFormatter)。在 Spark 3.x 中,pyspark 函数to_timestamp()返回nullUTC 偏移量超出 +/- 18:00 范围的日期时间。

示例代码:

from pyspark.sql import SparkSession
from pyspark.sql import functions as F

spark = SparkSession.builder.master("local[2]").appName("test") \
  .config("spark.driver.memory", "2g") \
  .config("spark.executor.memory", "1g") \
  .config('spark.driver.extraJavaOptions', '-Duser.timezone=GMT') \
  .config('spark.executor.extraJavaOptions', '-Duser.timezone=GMT') \
  .config('spark.sql.session.timeZone', 'UTC') \
  .getOrCreate()

columns = ["datetime", "offset"]
data = [
  ("2020-06-26T03:05:52+20:00", "+20:00"),
  ("2020-06-26T03:05:52+02:00", "+2:00"),
]
test_df = spark.createDataFrame(data).toDF(*columns)

test_df_two = test_df.withColumn(
  'to_ts', F.to_timestamp(F.col("datetime"))
)
test_df_two.show(truncate=False)

输出:

+-------------------------+------+-------------------+
|datetime                 |offset|to_ts              |
+-------------------------+------+-------------------+
|2020-06-26T03:05:52+20:00|+20:00|null               |
|2020-06-26T03:05:52+02:00|+2:00 |2020-06-26 01:05:52|
+-------------------------+------+-------------------+

我如何一般地将此类日期时间字符串转换为在我的库施加的 +/- 18:00 限制内的等效字符串?

标签: pythonapache-sparkdatetimepysparkutc

解决方案


推荐阅读