我有一个PostgreSql,它为每一行创建一个带时区的时间戳。但是现在当我尝试打印出这个时间戳时,我得到以下内容: “2013-03-06 00:00:00 + 01:00”
首先为什么说它00:00:00?
其次我怎么能把它转换成这样的东西:
06.03.2013 07:10:13
或
例如:“12秒前”,“1天1小时前”
谢谢 马文
答案 0 :(得分:1)
你必须使用python模块的datetime。从该模块中,您可以将字符串转换为日期并格式化该日期。
>>> 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'
答案 1 :(得分:1)
你有00:00:00
作为时间部分可能是因为有人插入了没有时间部分的日期。查看结果:
select current_date, current_timestamp;
你会得到:
"2013-03-07";"2013-03-07 08:31:59.098661+01"
当您使用日期INSERT或UPDATE timestamp列时,时间部分将被剪切为00:00:00
。如果您想要日期,时间和时区,则应使用current_timestamp
。
可以在服务器端和客户端上为字符串转换此类日期。可以使用许多PostgreSQL datetime functions,PostgreSQL format functions以及Python函数。
使用:
select to_char(current_timestamp, 'DD.MM.YY HH12:MI:SS')
你会得到类似的东西:
"07.03.13 08:40:50"
Lafada答案涵盖了日期时间对象的Python格式化。
如果要显示now和某个日期时间之间的差异,可以使用PostgreSQL age()
函数:
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