【问题标题】:Add one hour forward to current time in Python在 Python 中将当前时间向前加一小时
【发布时间】:2014-07-09 19:43:13
【问题描述】:

我正在编写我的 Python 脚本以获取时间。

当我的当前时间是晚上 8:30 时,我想知道如何在标签中添加小时,这将是晚上 9:00、晚上 9:30?

例如:

if (0 <= datetime.datetime.now().minute <= 29):
   self.getControl(4203).setLabel(time.strftime("%I").lstrip('0') + ':00' + time.strftime("%p"))
   self.getControl(4204).setLabel(time.strftime("%I").lstrip('0') + ':30' + time.strftime("%p"))
   self.getControl(4205).setLabel(time.strftime("%I").lstrip('0') + ':00' + time.strftime("%p"))
else:
   self.getControl(4203).setLabel(time.strftime("%I").lstrip('0') + ':30' + time.strftime("%p"))
   self.getControl(4204).setLabel(time.strftime("%I").lstrip('0') + ':00' + time.strftime("%p"))
   self.getControl(4205).setLabel(time.strftime("%I").lstrip('0') + ':30' + time.strftime("%p"))

当我当前时间在晚上 8:30 到晚上 8:59 之间时,id 4203 的标签将显示晚上 8:30,id 为 4204 的标签将显示晚上 8:00,id 为 4205 的标签将显示晚上 8:30。我希望标签显示为8:30PM9:00PM9:30PM

您能否告诉我如何为 ID 为 4204 和 4205 的标签添加前一小时?

【问题讨论】:

  • 请提供最少的示例。我们不知道self.getControl(...)(在这种情况下我们不需要知道它)。

标签: python python-2.7 datetime time


【解决方案1】:

对于时间偏移,您可以使用datetime.timedelta:

>>> import datetime

>>> datetime.datetime.now()
datetime.datetime(2014, 7, 9, 21, 47, 6, 178534)

>>> datetime.datetime.now() + datetime.timedelta(hours=1)
datetime.datetime(2014, 7, 9, 22, 47, 16, 851338)

至于您的代码,这里有几个改进的示例:

import datetime

# get current time
now = datetime.datetime.now()

# round to half hours
if (now.minute / 30):
    # minutes 30-59
    minute = 30
else:
    # minutes 00-29
    minute = 0
now = now.replace(minute=minute, second=0, microsecond=0)

def format(time):
    return time.strftime("%I").lstrip('0') + time.strftime(":%M%p")

# set labels
print(4203, format(now))
print(4204, format(now + datetime.timedelta(minutes=30)))
print(4205, format(now + datetime.timedelta(minutes=60)))

这是输出:

(4203, '11:00PM')
(4204, '11:30PM')
(4205, '12:00AM')

【讨论】:

  • 我尝试这样使用:one_hour = datetime.strptime("%I").lstrip('0'), one_hour += datetime.timedelta(hours=1) print one_hour` 我会得到一个错误:one_hour = datetime.strptime("%I").lstrip('0') AttributeError: 'module' object has no attribute 'strptime'。你知道我为什么会收到这个错误吗?
  • @user3817638 你得到一个错误,因为datetime 模块没有strptime 函数。但是您可以在 datetime 对象上调用它,例如 datetime.datetime.now().strptime(...)。至于你的代码,我很难理解到底应该显示哪个标签。
  • @user3817638 搞清楚你想要什么了,今天有点累了:) 添加了一个使用datetime.timedelta 的示例,可能会派上用场。
【解决方案2】:

您可以使用纪元中的秒数进行计算:

import time
t0 = time.time() # now (in seconds)
t1 = t0 + 60*30  # now + 30 minutes
t2 = t0 + 60*60  # now + 60 minutes

for t in [t0,t1,t2]:
   print time.strftime("%I %M %p",time.localtime(t))

输出

09 57 PM
10 27 PM
10 57 PM

如果要将时间四舍五入到前半小时,请添加以下行:

t0 -= t0 % (30*60) # round down to previous half-hour

【讨论】:

    猜你喜欢
    • 2012-11-21
    • 2017-10-28
    • 1970-01-01
    • 2010-10-10
    • 2020-10-11
    • 2017-03-28
    • 1970-01-01
    • 2013-05-07
    相关资源
    最近更新 更多