【问题标题】:How much time left to given date (days, hours, mins, s.)距给定日期还剩多少时间(天、小时、分钟、秒)
【发布时间】:2020-02-11 22:13:57
【问题描述】:

我正在尝试在 python 中制作某种“截止日期时钟”。 关于时差计算的话题很多,我跟着一些并整理了这种代码:

import datetime
from dateutil.relativedelta import relativedelta

# Get current time:
today = datetime.date.today()
timenow = datetime.datetime.now()
current_time = str(today) + " " + str(timenow.strftime("%H:%M:%S"))

# Set deadline:
deadline = "2019-12-12 15:00:00"

# Calculate difference:
start = datetime.datetime.strptime(current_time,'%Y-%m-%d %H:%M:%S')
ends = datetime.datetime.strptime(deadline, '%Y-%m-%d %H:%M:%S')
diff = relativedelta(ends, start)

print("Now: " + current_time)
print("Deadline: " + deadline)

print(str(diff.days) + " days. " 
      + str(diff.hours) + " hours. " 
      + str(diff.minutes) + " minutes. " 
      + str(diff.seconds) + " seconds. " 
      )

但问题是,它总是会显示最多一个月的差异......那么问题出在哪里?

【问题讨论】:

  • 您没有显示相对增量的月份或年份?您可能会将其与标准库 timedelta 混淆。

标签: python time clock difference


【解决方案1】:

只需用结束日期减去开始日期即可。

import datetime
today = datetime.date.today()
timenow = datetime.datetime.now()
deadline = "2019-12-12 15:00:00"
current_time = str(today) + " " + str(timenow.strftime("%H:%M:%S"))
start = datetime.datetime.strptime(current_time,'%Y-%m-%d %H:%M:%S')
ends = datetime.datetime.strptime(deadline, '%Y-%m-%d %H:%M:%S')

print(start - ends)

正如 cmets 中所建议的,您实际上不需要单独使用 .today().now().now() 将当前日期和时间作为日期时间对象本身返回。

import datetime
timenow = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')
deadline = "2019-12-12 00:00:00"
start = datetime.datetime.strptime(timenow,'%Y-%m-%d %H:%M:%S')
ends = datetime.datetime.strptime(deadline, '%Y-%m-%d %H:%M:%S')
print(start - ends)

【讨论】:

  • 如果now() 为您提供日期和时间,我不知道您为什么使用today()。您不必将其转换为字符串然后将其解析回来。 start = datetime.datetime.now()
  • 我刚刚复制了 OP 的代码并添加了所需的更改。你是对的,我应该添加这个。谢谢。
  • 顺便说一句:要删除微秒,您可以执行 start = start.replace(microsecond = 0)
  • 好的,现在我看到 OP 使用了这种方法。我跳过了有问题的代码,我从回答中的代码开始:)
猜你喜欢
  • 2021-11-20
  • 2012-08-13
  • 1970-01-01
  • 2012-05-19
  • 2012-12-30
  • 2011-11-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多