【问题标题】:Python: TimeDate IssuePython:时间日期问题
【发布时间】:2014-09-04 12:14:55
【问题描述】:

我一直在为特定时间制作一个小型倒计时计时器,但它似乎存在负数天数的问题。示例:

s1 = '14:00:00'
s2 = str(current_time)
FMT = '%H:%M:%S'
tdelta = datetime.strptime(s1, FMT) - datetime.strptime(s2, FMT)
print tdelta
>>>-1 day, 22:34:23

Current_time我的系统时间

如何删除 -1 天?两个字符串(s1s2)都没有天数,因此它在 tdelta 变量计算中生成这一天数

提前致谢!

【问题讨论】:

  • 如果你使用 'current_time' 对象。为什么不在减法中使用它? (现在你可以这样做:object => string => parse back to object)
  • 根据规范 (docs.python.org/2/library/time.html#time.strptime) 返回一个包含日期和时间的时间对象。减去日期和时间可能会出错。
  • 请提供current_time的示例。
  • now = datetime.now() hour = str(now.hour) mi = str(now.minute) ss = str(now.second) current_time = hour + ':' + mi + ':' + ss 这是 current_time @whereswalden 的代码
  • 也许您想从 s2 中减去 s1,而不是相反,您现在的方式(结束时间 - 开始时间而不是开始时间 - 结束时间)?

标签: python date time strptime


【解决方案1】:

如果您知道目标时间应该是哪一天(例如 2014 年 8 月 1 日),请使用它:

import datetime
target_time = datetime.datetime(2014, 8, 1, 14, 0, 0)
now = datetime.datetime.now()
time_to_go = target_time - now
print(time_to_go)

如果目标时间是今天,您可以只更改小时、分钟和秒,其余的从今天开始:

import datetime
target_time = datetime.datetime.now().replace(hour=14, minute=0, second=0, microsecond = 0)
now = datetime.datetime.now()
time_to_go = target_time - now
print(time_to_go)

如果 target_time 早于当前时间,则 timedelta 对象通过使用减少的负天数和正秒数来跟踪负时间,从而增加负差,从而增加到 target_time 的时间距离。

如果您总是想跟踪给定小时的时间,无论是哪一天,请使用:

import datetime
target_time = datetime.datetime.now().replace(hour=14, minute=0, second=0, microsecond = 0)
now = datetime.datetime.now()
if target_time < now:
    target_time += datetime.timedelta(1)
time_to_go = target_time - now
print(time_to_go)

【讨论】:

  • 感谢您的帮助,但问题仍然存在。我应该补充一点,倒计时每天都在同一时间运行。例如:s1 将始终停留在下午 2 点。一旦倒计时到达该时间,则需要计算第二天的倒计时时间。我认为这是整体问题,它仍在同一天计算(因此为负数),那么我将如何告诉它从接下来的日期开始计算?
  • 知道了。天数中的 -1 是使用负天数和正数秒数测量时间增量的结果,加起来就是负数秒数。
  • 添加了您问题的答案。
猜你喜欢
  • 1970-01-01
  • 2020-05-09
  • 2021-12-19
  • 2010-10-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-24
相关资源
最近更新 更多