如何解析带时区的时间戳?
How can I parse timestamp with time zone?
我正在尝试做什么
我正在使用 Py Arrow 解析来自 csv 的数据(最初来自 Postgres 数据库)。我在解析看起来像 2017-08-19 14:22:11.802755+00
.
的时间戳(带有时区)时遇到问题
然后我收到如下错误:
pyarrow.lib.ArrowInvalid: In CSV column #11: CSV conversion error to timestamp[ns]: invalid value '2017-08-19 12:22:11.802755+00'
我尝试过的事情
我尝试对数据使用指定的解析器,所以这就是我读取 csv(为简洁起见的片段)的方式:
arrow_table = arrow_csv.read_csv(
input_file=input_buffer,
convert_options=arrow_csv.ConvertOptions(
timestamp_parsers=[ISO8601, "%Y-%m-%d %H:%M:%S.%6N %z"],# I have also tried omitting this
column_types=arrow_schema,
strings_can_be_null=True,
true_values=['t'],
false_values=['f'],
)
)
不是 column_types
我映射了我想要解析的列(我正在将 Postgres 类型映射到 Arrow 类型,它适用于除此之外的所有其他类型):
timestamp with time zone': pa.timestamp('ns', tz="+00:00")
但是 none 似乎有效。如果需要,我很乐意提供更多信息。
不幸的是,Arrow 的 IOS8601 解析器不支持偏移字符串。 strptime 解析器基于不支持 %z
的 2008 POSIX definition of strptime via vendored musl。 strptime 的一些实现确实包括支持(例如 libc 实现)
这似乎是对任一解析器的有效功能请求。我已经提交 ARROW-13348 来跟踪这个。
对于解决方法,最好的办法可能是将列解析为字符串并使用其他一些库(pandas?)转换为时间戳。
我正在尝试做什么
我正在使用 Py Arrow 解析来自 csv 的数据(最初来自 Postgres 数据库)。我在解析看起来像 2017-08-19 14:22:11.802755+00
.
然后我收到如下错误:
pyarrow.lib.ArrowInvalid: In CSV column #11: CSV conversion error to timestamp[ns]: invalid value '2017-08-19 12:22:11.802755+00'
我尝试过的事情
我尝试对数据使用指定的解析器,所以这就是我读取 csv(为简洁起见的片段)的方式:
arrow_table = arrow_csv.read_csv(
input_file=input_buffer,
convert_options=arrow_csv.ConvertOptions(
timestamp_parsers=[ISO8601, "%Y-%m-%d %H:%M:%S.%6N %z"],# I have also tried omitting this
column_types=arrow_schema,
strings_can_be_null=True,
true_values=['t'],
false_values=['f'],
)
)
不是 column_types
我映射了我想要解析的列(我正在将 Postgres 类型映射到 Arrow 类型,它适用于除此之外的所有其他类型):
timestamp with time zone': pa.timestamp('ns', tz="+00:00")
但是 none 似乎有效。如果需要,我很乐意提供更多信息。
不幸的是,Arrow 的 IOS8601 解析器不支持偏移字符串。 strptime 解析器基于不支持 %z
的 2008 POSIX definition of strptime via vendored musl。 strptime 的一些实现确实包括支持(例如 libc 实现)
这似乎是对任一解析器的有效功能请求。我已经提交 ARROW-13348 来跟踪这个。
对于解决方法,最好的办法可能是将列解析为字符串并使用其他一些库(pandas?)转换为时间戳。