【问题标题】:How can I account for AM/PM when using datetime.strptime?使用 datetime.strptime 时如何考虑 AM/PM?
【发布时间】:2022-10-04 18:10:21
【问题描述】:

我正在尝试使用日期时间计算以分钟为单位的差异。当前实现失败,因为程序不知道它是 PM 还是 AM。例如,下面的代码会产生此输出。

The difference in minutes between 2022-10-04 01:28:14 and 2022-10-04 10:28:14 is 540

如果假设第一次是凌晨 1 点,第二次是晚上 10 点,那么这是错误的。如何查看上午/下午?我试过 %H 和 %I

fmt = '%Y-%m-%d %I:%M:%S'
tstamp1 = datetime.strptime(firstRequestTime, fmt)
tstamp2 = datetime.strptime(secondRequestTime, fmt)
if tstamp1 > tstamp2:
     td = tstamp1 - tstamp2
else:
     td = tstamp2 - tstamp1
td_mins = int(round(td.total_seconds() / 60))
print(f"The difference in minutes between {tstamp1} and {tstamp2} is {td_mins}")

【问题讨论】:

  • 尝试将%p 添加到格式中。
  • 注意到......现在正在调查。谢谢
  • 请添加firstRequestTimesecondRequestTime 字符串的外观信息。

标签: python datetime time python-datetime


【解决方案1】:

您可以首先将“幼稚”的日期时间转换为“有意识”的添加时区信息的日期时间。 因此,PM 日期时间与 AM 日期时间有 12 小时的偏移。

https://docs.python.org/3/library/datetime.html?highlight=datetime#aware-and-naive-objects

fmt = '%Y-%m-%d %I:%M:%S'
tstamp1 = datetime.strptime(firstRequestTime, fmt)
tstamp2 = datetime.strptime(secondRequestTime, fmt)

tstamp1 = tstamp1.replace(tzinfo=timedelta(hours=0))
tstamp2 = tstamp2.replace(tzinfo=timedelta(hours=12))


if tstamp1 > tstamp2:
     td = tstamp1 - tstamp2
else:
     td = tstamp2 - tstamp1
td_mins = int(round(td.total_seconds() / 60))
print(f"The difference in minutes between {tstamp1} and {tstamp2} is {td_mins}")

【讨论】:

  • 12 小时格式或 24 小时格式与天真与感知日期时间(tzinfo None 或 set)无关。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-02-18
  • 2022-01-19
  • 1970-01-01
  • 2018-12-16
  • 2018-04-09
  • 2018-07-22
相关资源
最近更新 更多