1

我有一个 PostgreSql,它为每一行创建一个带有时区的时间戳。但是现在当我尝试打印此时间戳时,我得到以下信息:“2013-03-06 00:00:00+01:00”

首先为什么说它 00:00:00 ?

其次我怎么能把它转换成这样的东西:

06.03.2013 07:10:13

或者

例如:“12 秒前”、“1 天零一个小时前”

谢谢马文

4

2 回答 2

1

你得到00:00:00的时间部分可能是因为有人只插入了没有时间部分的日期。查看结果:

select current_date, current_timestamp;

你会得到:

"2013-03-07";"2013-03-07 08:31:59.098661+01"

当您仅使用日期插入或更新时间戳列时,时间部分将被剪切为00:00:00. current_timestamp如果你想要日期、时间和时区,你应该使用。

将此类日期转换为字符串可以在服务器端和客户端完成。有许多PostgreSQL 日期时间函数、可以使用的PostgreSQL 格式函数以及 Python 函数。

和:

select to_char(current_timestamp, 'DD.MM.YY HH12:MI:SS')

你会得到类似的东西:

"07.03.13 08:40:50"

Lafada 的答案涵盖了日期时间对象的 Python 格式。

当您想显示现在和某个日期时间之间的差异时,您可以使用 PostgreSQLage()函数:

select age(timestamp '2003-03-01');

结果:

"10 years 6 days"

当然 Python 也可以显示时间戳之间的差异:

import datetime
dt_old = datetime.datetime.strptime('2001-12-31 22:33:44', '%Y-%m-%d %H:%M:%S')
dt_diff = (datetime.datetime.today() - dt_old)
print(dt_diff)

我的结果:

4083 days, 10:16:14.140000
于 2013-03-07T07:53:07.920 回答
1

您必须使用python 模块的日期时间。从该模块中,您可以将字符串转换为日期并格式化该日期。

>>> from datetime import datetime
>>> datetime.strptime('06.03.2013 07:10:13', '%d.%m.%Y %H:%M:%S').strftime('%Y-%d-%m %H:%M:%S%Z')
'2013-06-03 07:10:13'
于 2013-03-07T06:28:41.377 回答