如何用Python计算时间

13 投票
5 回答
77650 浏览
提问于 2025-04-15 16:07

我想写一个Python脚本,做一个时间计算器。

比如说:

假设现在的时间是13:05:00。

我想在这个时间上加1小时、23分钟和10秒。

然后我想把结果打印出来。

我该怎么在Python里实现这个呢?

如果还涉及到日期的话呢?

5 个回答

4

可以看看 datetime.timedelta 这个文档。

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
8

在计算日期和时间时,有几种方法可以选择,但我会介绍一种简单的方法:

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()

希望这对你有帮助

17

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

需要注意的是,单独对时间进行加法运算是没有意义的(不过你可以把日期和时间合并成一个日期时间对象,然后再从中获取时间)。夏令时(DST)是主要的问题所在。例如,12:01am加上5小时,可能在不同的日子里会变成4:01am、5:01am或6:01am。

撰写回答