微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何用时区解析时间戳?

如何解决如何用时区解析时间戳?

我想做什么

我正在使用 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")

但这些似乎都不起作用。如果需要,我很乐意提供更多信息。

解决方法

不幸的是,Arrow 的 IOS8601 解析器不支持偏移字符串。 strptime 解析器基于 2008 POSIX definition of strptime,通过不支持 %z 的供应商 musl。 strptime 的一些实现确实包括支持(例如 libc 实现)

这似乎是对任一解析器的有效功能请求。我已提交 ARROW-13348 来跟踪此事。

对于变通方法,最好的办法可能是将列解析为字符串并使用其他一些库(pandas?)来转换为时间戳。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?