【问题标题】:Convert UTC Timestamp to a normal date & timr将 UTC 时间戳转换为正常的日期和时间
【发布时间】:2013-02-22 05:58:20
【问题描述】:

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

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

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

06.03.2013 07:10:13

或者

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

谢谢 马文

【问题讨论】:

    标签: python postgresql datetime timestamp


    【解决方案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 datetime functionsPostgreSQL format functions可以和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
    

    【讨论】:

    • 感谢您的出色回答 :) ..我没有在时间戳列中插入任何内容,我将其配置为 addedat TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT NOW()
    • PostgreSQL now() 函数返回日期和时间,但在您的声明中,只有当有人没有在 INSERT 语句中为该列设置值时才会使用它。您必须在应用程序中搜索 INSERT。此外,最好使用 CURRENT_TIMESTAMP 而不是 PostgreSQL:特定的 now() -- CURRENT_TIMESTAMP 将适用于我知道的其他数据库。
    【解决方案2】:

    你必须使用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'
    

    【讨论】:

      猜你喜欢
      • 2021-10-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多