将UTC时间戳转换为普通日期和时间

1 投票
2 回答
1157 浏览
提问于 2025-04-17 18:14

我有一个PostgreSql数据库,它为每一行创建一个带时区的时间戳。但是当我尝试打印这个时间戳时,得到的结果是: "2013-03-06 00:00:00+01:00"

首先,为什么显示的是00:00:00?

其次,我该如何把它转换成这样的格式:

06.03.2013 07:10:13

或者

比如说:“12秒前”,“1天1小时前”

谢谢你,

马文

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 中日期时间对象的格式化。

当你想显示现在和某个日期时间之间的差异时,可以使用 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
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'

撰写回答