【问题标题】:How to deduct the current time from a set time如何从设定的时间中减去当前时间
【发布时间】:2016-04-19 18:17:54
【问题描述】:

所以我正在尝试创建一个“计划者”或日记。我正在尝试创建代码,以便它建议您在睡觉前一天或在您必须进行计划的活动之前还剩下多少时间。

late = timedelta(hours=23)
current_time = now.hour,now.minute
time_left = (late - current_time).minutes
print 'So if the time is %s:%s, That means you have %s minutes left' % (now.hour,now.minute,time_left) 

通过查看其他线程,这是我的方法,但我尝试了其他几种方法,例如

late = datetime(datetime.day,datetime.month,datetime.year,23,00) 

再次在其他线程上看到了这个。我已经尝试了很多方法,现在我开始对如何解决它感到困惑。

再次感谢您提前提供的任何帮助

编辑: 使用时

late = datetime(datetime.day,datetime,month,datetime.year,23,00) 

我得到了 Valueerror 'day is out of range month'

并使用当前代码

late = timedelta(23,00) 

在这个例子中,我得到了一个类型错误“不支持的操作数类型”:“datetime.timedelta”和“元组”。

我只想让代码输出晚上 11:00(或 23:00)与当前时间之间的时间差(以分钟为单位)。抱歉没说清楚

回答编辑: 感谢 cmets 并回答了我使代码复杂且未正确使用 datetime() 的问题,

    y = today.year
    m = today.month
    d = today.day

    late = datetime(y,m,d,23,0,0)

我把年月日弄错了,时间格式也弄错了。

感谢大家的帮助。

【问题讨论】:

  • 你有什么错误,或者你有错误的输出?请解释一下你得到了什么以及你想要什么?
  • 你能更新同样的问题吗?同时给出完整的回溯。
  • 抱歉,完整的回溯?
  • 有很多错误:) datetime 没有days 的构造函数作为第一个参数。你在几天内通过year,这就是它给出错误的原因。检查datetime.datetime 文档。 docs.python.org/2/library/datetime.html#datetime.datetime
  • 您必须在datetime(datetime.day,datetime,month,datetime.year,23,00)中更正您的代码

标签: python python-2.7 date time


【解决方案1】:

以下将演示如何做您想要实现的目标

from datetime import datetime


today = datetime.today()
y = today.year
m = today.month
d = today.day

late = datetime(y,m,d,23,0,0)

now = datetime.now()

timeDiff = late - now
print 'So if the time is %s:%s, That means you have %s minutes left' % (now.hour,now.minute,timeDiff.seconds/60) 

__sub__ 方法已针对日期时间实现,但显然要使用运算符,两个操作数都必须是日期时间类型。

>>> datetime.now().__class__
<type 'datetime.datetime'>

当你从另一个中减去一个 datetime 对象时,你会得到一个 timedelta 类型的对象。

>>> (datetime(2016,04,19)-datetime(2016,04,18)).__class__
>>> <type 'datetime.timedelta'>

datetime 表示时间戳,而 timedelta 表示时差

可以从 datetime 对象中减去 timedelta 对象,但反之则不行,这是不言自明的。

>>> datetime(2016,10,1)-timedelta(1)
datetime.datetime(2016, 9, 30, 0, 0)

【讨论】:

  • 我很高兴看到这个答案,因为 datetime 可以很好地处理复杂的事情,但它不会让你减去 .time() 对象的事实总是让我感到沮丧,因为这似乎合乎逻辑为这类任务做的事情。有很多违规行为(时间对象没有strptime,但他们给你strftime)感觉很笨拙。点赞:)
  • @roganjosh 如果要从日期时间对象中减去时间对象,请将时间对象转换为日期时间。你可以使用this simple recipe
  • 谢谢,但不是我做不到,只是我的逻辑过程是now = datetime.datetime.now().time()deadline = datetime.datetime.strptime("23:00:00", "%H:%M:%S").time()。我知道时间肯定需要一个健壮系统的日期上下文,但对于非程序员的日常分析,datetime 模块似乎将最大复杂性作为标准,而不是极简主义和增加复杂性的能力如所须。这与我遇到的任何其他 Python 模块都不同 :)
  • 我同意日期时间可能违反直觉。但唯一阻止您进行直接减法的是,您没有明确指定日期,这是时间戳的重要组成部分。事实上datetime.strptime("2016-04-19 23:00:00", "%Y-%m-%d %H:%M:%S") - datetime.now() 工作得很好。
  • 我的任务是每天查看某物交付时间的时间戳,并检查它是否在客户要求的时间段内。它总是与日无关(即使有夏令时)。目前这是非常违反直觉的。随着数据分析师/科学家涌向 Python,我认为这些简单的功能将被添加,因为它的 atm 过多。 MS Excel 在这项任务中处于领先地位,这很可悲:(
猜你喜欢
  • 2018-08-16
  • 2020-06-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-02-03
  • 2020-12-10
相关资源
最近更新 更多