将 Y-m-dTH:M:Sz 转换为日期时间以进行比较 [重复]

Posted

技术标签:

【中文标题】将 Y-m-dTH:M:Sz 转换为日期时间以进行比较 [重复]【英文标题】:Convert Y-m-dTH:M:Sz to datetime to compare [duplicate] 【发布时间】:2020-05-06 19:37:38 【问题描述】:

我有一个类似"2020-01-20T11:00:05-05:00" 的字符串,我想将它与datetime.now() 进行比较,看看它是否大于它。

我想我需要使用datetime.strptime(..., ...),虽然我不知道如何处理时区位。

我该如何解决这个问题?

谢谢。

编辑: date_time = datetime.strptime("2020-01-20T11:00:05-05:00", "%Y-%m-%dT%H:%M:%S%z")。这可行,但是现在当我比较它们时,我得到TypeError: can't compare offset-naive and offset-aware datetimes

EDIT2:也许我需要让我的datetime.now() 时区感知?

【问题讨论】:

【参考方案1】:

正如我所说,该链接似乎提供了问题所需的信息。但是,我将添加一个完整的工作示例。使用pytzdatetime

import pytz
from datetime import datetime

now = datetime.now(pytz.utc)
if now < datetime.strptime("2020-01-21T11:00:05-05:00", "%Y-%m-%dT%H:%M:%S%z"):
    print("A")
else:
    print("B")

输出:

B

将日期更改为“10”以确保时间为True

if now < datetime.strptime("2020-01-10T11:00:05-05:00", "%Y-%m-%dT%H:%M:%S%z"):
    print("A")
else:
    print("B")

输出:

A

Jason Whitman 提到的另一个选项使用 datetime.timezone.utc 更改导入并使用它会起作用:

from datetime import datetime, timezone

now = datetime.now(timezone.utc)
if now < datetime.strptime("2020-01-21T11:00:05-05:00", "%Y-%m-%dT%H:%M:%S%z"):
    print("A")
else:
    print("B")

【讨论】:

为什么是pytz.utc 而不是datetime.timezone.utc 这也是一个有效的答案,我会编辑添加它。

以上是关于将 Y-m-dTH:M:Sz 转换为日期时间以进行比较 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

将日期转换为字符串以进行自动目录搜索

将 datetime64[ns] 索引转换为日期 pandas 以进行比较

将日期转换为浮点数以对 Pandas 数据框进行线性回归

如何将日期时间转换为erlang中的日期名称和月份名称?

(颤振)将飞镖时间(不是日期)转换为警报的持续时间

Javascript将日期时间字符串转换为纪元