【发布时间】:2018-04-08 23:58:51
【问题描述】:
目前我的时间戳格式如下:
2018-04-02T09:00:00+09:30
如何转换上面的时间戳以适应 postgres 的时间戳列,如下所示?
2018-04-02 09:00:00 +09.30
另外如何使用python在加载到postgres表之前先转换xml时间戳?
【问题讨论】:
标签: python postgresql timestamp
目前我的时间戳格式如下:
2018-04-02T09:00:00+09:30
如何转换上面的时间戳以适应 postgres 的时间戳列,如下所示?
2018-04-02 09:00:00 +09.30
另外如何使用python在加载到postgres表之前先转换xml时间戳?
【问题讨论】:
标签: python postgresql timestamp
这不需要任何转换,它是一个普通的ISO 8601 time stamp。 PostgreSQL supports multiple input formats for time stamps
select timestamp with time zone '2018-04-02T09:00:00+09:30';
timestamptz
------------------------
2018-04-01 18:30:00-05
(1 row)
您会注意到它以 UTC 格式存储它。那正是你想要的。来自the docs,
对于
timestamp with time zone,内部存储的值始终采用 UTC(通用协调时间,传统上称为格林威治标准时间,GMT)。具有指定明确时区的输入值使用该时区的适当偏移量转换为 UTC。如果输入字符串中没有说明时区,则假定它在系统的TimeZone参数指示的时区中,并使用时区的偏移量转换为UTC。当
timestamp with time zone value输出时,它总是从 UTC 转换为当前时区,并显示为该时区的本地时间。 要查看另一个时区的时间,请更改时区或使用AT TIME ZONE构造(参见第 9.9.3 节)。
【讨论】:
TIMESTAMP WITH TIME ZONE)。例如,在psql 中,您可以使用TimeZone 配置变量设置您希望时间戳显示的时区。
如果您知道您将始终以该格式获取数据,您可以执行以下操作:
>>> a = "2018-04-02T09:00:00+09:30"
>>>
>>> b = a.replace('T', ' ').replace('+', ' +')
>>> b
'2018-04-02 09:00:00 +09:30'
虽然很丑,但是很管用。
将您的输入解释为日期然后以所需格式打印总是更安全。
【讨论】: