【发布时间】:2010-12-17 13:31:32
【问题描述】:
我想写一个 Python 脚本来充当时间计算器。
例如:
假设现在是 13:05:00
我想增加 1 小时 23 分 10 秒。
我想把答案打印出来。
如何在 Python 中做到这一点?
如果还涉及日期怎么办?
【问题讨论】:
-
请显示您目前拥有的代码。这可以使用
datetime模块或time模块来完成。请查看这些模块并提出具体问题。
我想写一个 Python 脚本来充当时间计算器。
例如:
假设现在是 13:05:00
我想增加 1 小时 23 分 10 秒。
我想把答案打印出来。
如何在 Python 中做到这一点?
如果还涉及日期怎么办?
【问题讨论】:
datetime 模块或time 模块来完成。请查看这些模块并提出具体问题。
datetime.timedelta 设计用于固定时差(例如,1 天是固定的,1 个月不是)。
>>> import datetime
>>> t = datetime.time(13, 5)
>>> print t
13:05:00
>>> now = datetime.datetime.now()
>>> print now
2009-11-17 13:03:02.227375
>>> print now + datetime.timedelta(hours=1, minutes=23, seconds=10)
2009-11-17 14:26:12.227375
请注意,仅对时间进行加法是没有意义的(但您可以将日期和时间combine 放入日期时间对象,使用它,然后获取时间)。 DST是罪魁祸首。例如,上午 12:01 + 5 小时可能是不同日期的上午 4:01、上午 5:01 或上午 6:01。
【讨论】:
对于计算日期和时间有几个选项,但我会写简单的方法:
import datetime
import dateutil.relativedelta
# current time
date_and_time = datetime.datetime.now()
date_only = date.today()
time_only = datetime.datetime.now().time()
# calculate date and time
result = date_and_time - datetime.timedelta(hours=26, minutes=25, seconds=10)
# calculate dates: years (-/+)
result = date_only - dateutil.relativedelta.relativedelta(years=10)
# months
result = date_only - dateutil.relativedelta.relativedelta(months=10)
# days
result = date_only - dateutil.relativedelta.relativedelta(days=10)
# calculate time
result = date_and_time - datetime.timedelta(hours=26, minutes=25, seconds=10)
result.time()
希望对你有帮助
【讨论】:
Example
>>> from datetime import timedelta
>>> year = timedelta(days=365)
>>> another_year = timedelta(weeks=40, days=84, hours=23,
... minutes=50, seconds=600) # adds up to 365 days
>>> year == another_year
True
>>> ten_years = 10 * year
>>> ten_years, ten_years.days // 365
(datetime.timedelta(3650), 10)
>>> nine_years = ten_years - year
>>> nine_years, nine_years.days // 365
(datetime.timedelta(3285), 9)
>>> three_years = nine_years // 3;
>>> three_years, three_years.days // 365
(datetime.timedelta(1095), 3)
>>> abs(three_years - ten_years) == 2 * three_years + year
True
【讨论】:
看看mx.DateTime,尤其是DateTimeDelta。
import mx.DateTime
d = mx.DateTime.DateTimeDelta(0, 1, 23, 10)
x = mx.DateTime.now() + d
x.strftime()
请记住,时间实际上是一件相当复杂的事情。闰年和闰秒只是开始......
【讨论】:
python 中的 datetime 类将提供您需要的一切。支持加减法等多种运算。
【讨论】: