如何在两个datetime对象之间以分钟为单位区分时间?


当前回答

这是为了找出当前时间和上午9:30之间的差值

t=datetime.now()-datetime.now().replace(hour=9,minute=30)

其他回答

要得到小时、分和秒,你可以这样做

>>> import datetime
>>> first_time = datetime.datetime.now()
>>> later_time = datetime.datetime.now()
>>> difference = later_time - first_time
>>> m, s = divmod(difference.total_seconds(), 60)
>>> print("H:M:S is {}:{}:{}".format(m//60, m%60, s))

这可能会帮助一些人,用这个方法找到过期与否其计算天数。这是dt。秒和dt。微秒也可用

from datetime import datetime
# updated_at = "2022-10-20T07:18:56.950563"
def is_expired(updated_at):
    expires_in = 7 #days
    datetime_format = '%Y-%m-%dT%H:%M:%S.%f'
    time_difference = datetime.now() - datetime.strptime(updated_at, datetime_format)

    return True if time_difference.days > expires_in else False

这是我使用mktime的方法。

from datetime import datetime, timedelta
from time import mktime

yesterday = datetime.now() - timedelta(days=1)
today = datetime.now()

difference_in_seconds = abs(mktime(yesterday.timetuple()) - mktime(today.timetuple()))
difference_in_minutes = difference_in_seconds / 60

基于@Attaque的精彩回答,我提出了一个更短的简化版本的日期时差计算器:

seconds_mapping = {
    'y': 31536000,
    'm': 2628002.88, # this is approximate, 365 / 12; use with caution
    'w': 604800,
    'd': 86400,
    'h': 3600,
    'min': 60,
    's': 1,
    'mil': 0.001,
}

def get_duration(d1, d2, interval, with_reminder=False):
    if with_reminder:
        return divmod((d2 - d1).total_seconds(), seconds_mapping[interval])
    else:
        return (d2 - d1).total_seconds() / seconds_mapping[interval]

我改变了它,以避免声明重复的函数,删除了漂亮的打印默认间隔,并增加了对毫秒、周和ISO月的支持(简单地说,月只是一个近似,基于每个月等于365/12的假设)。

生产:

d1 = datetime(2011, 3, 1, 1, 1, 1, 1000)
d2 = datetime(2011, 4, 1, 1, 1, 1, 2500)

print(get_duration(d1, d2, 'y', True))      # => (0.0, 2678400.0015)
print(get_duration(d1, d2, 'm', True))      # => (1.0, 50397.12149999989)
print(get_duration(d1, d2, 'w', True))      # => (4.0, 259200.00149999978)
print(get_duration(d1, d2, 'd', True))      # => (31.0, 0.0014999997802078724)
print(get_duration(d1, d2, 'h', True))      # => (744.0, 0.0014999997802078724)
print(get_duration(d1, d2, 'min', True))    # => (44640.0, 0.0014999997802078724)
print(get_duration(d1, d2, 's', True))      # => (2678400.0, 0.0014999997802078724)
print(get_duration(d1, d2, 'mil', True))    # => (2678400001.0, 0.0004999997244524721)

print(get_duration(d1, d2, 'y', False))     # => 0.08493150689687975
print(get_duration(d1, d2, 'm', False))     # => 1.019176965856293
print(get_duration(d1, d2, 'w', False))     # => 4.428571431051587
print(get_duration(d1, d2, 'd', False))     # => 31.00000001736111
print(get_duration(d1, d2, 'h', False))     # => 744.0000004166666
print(get_duration(d1, d2, 'min', False))   # => 44640.000024999994
print(get_duration(d1, d2, 's', False))     # => 2678400.0015
print(get_duration(d1, d2, 'mil', False))   # => 2678400001.4999995

如果a, b是datetime对象,那么在Python 3中查找它们之间的时间差:

from datetime import timedelta

time_difference = a - b
time_difference_in_minutes = time_difference / timedelta(minutes=1)

在早期的Python版本中:

time_difference_in_minutes = time_difference.total_seconds() / 60

如果a, b是天真的datetime对象,例如datetime.now()返回的,那么如果对象表示具有不同UTC偏移量的本地时间,例如DST转换前后或过去/未来日期,则结果可能是错误的。更多细节:查找datetimes之间是否已经过了24小时- Python。

要获得可靠的结果,请使用UTC时间或时区感知的datetime对象。