繁体   English   中英

Python 比较不同的时间值以获得以分钟为单位的时间增量

[英]Python comparing to different time values to get time delta in minutes

我试图从两个不同的时间值中获取时间增量 i 分钟。

时间1 = 2020-11-28T10:31:12Z 时间2 = 2020-11-28T09:10:23.203+0000

然后我会让 i 条件:如果时差大于 x 分钟,运行代码...

任何人都有解决方案。 我尝试使用 datetime.datetime.strptime() 但无法以相同的格式获取它们。

谢谢

使用日期解析器让它找出日期格式

代码

from dateutil.parser import parse

def time_difference(time1, time2):
    # Parse strings into datetime objects
    dt1 = parse(time1)
    dt2 = parse(time2)

    # Get timedelta object
    c = dt1 - dt2
    
    # Difference in minutes
    return (c.total_seconds()/60)

测试

time1 = "2020-11-28T10:31:12Z"
time2 = "2020-11-28T09:10:23.203+0000"
print(time_difference(time1, time2))
# Output: 80.81328333333333

假设你不需要分秒,你可以做这样的事情:

time1 = '2020-11-28T10:31:12Z'
time2 = '2020-11-28T09:10:23.203+0000'

import time
import datetime


def get_timestamp(time_str):
    time_splited = time_str.split('T')
    time_str_formatted =  ' '.join([time_splited[0],time_splited[1][:8]])
    return time.mktime(datetime.datetime.strptime(time_str_formatted,"%Y-%m-%d %H:%M:%S").timetuple())
    

print(get_timestamp(time1))
print(get_timestamp(time2))

将两次重新格式化为相同的时间格式。 那么您的情况将如下所示:

if abs(get_timestamp(time1) -get_timestamp(time2) ) > x*60:
    do_something(....)

时间不统一,因此您必须使它们相同才能使用 strptime。 为了准确起见,我更喜欢将其转换为秒,如果需要,您还可以在稍后阶段比较秒、分钟或小时。

import datetime

time1 = '2020-11-28T10:31:12Z'
time2 = '2020-11-28T09:10:23.203+0000'

def minutes_diff():   

    #Make the times uniform so you can then use strptime
    date_time1 = datetime.datetime.strptime(time1[:-1], "%Y-%m-%dT%H:%M:%S")
    date_time2 = datetime.datetime.strptime(time2[:-9], "%Y-%m-%dT%H:%M:%S")

    #Convert to seconds for accuracy
    a_timedelta = date_time1 - datetime.datetime(1900, 1, 1)
    b_timedelta = date_time2 - datetime.datetime(1900, 1, 1)
    seconds_time_a = a_timedelta.total_seconds()
    seconds_time_b = b_timedelta.total_seconds()

    #Take one from each other for minutes
    time_in_minutes = (seconds_time_a - seconds_time_b) / 60

    #Then decide what to do with it
    if time_in_minutes < 60: # 1 hour
    
        print('Less than an hours do something')

    else: 
        print('More than an hour do nothing')


minutes_diff()

DARRYL、JOHNNY 和 MARCIN,感谢您的解决方案,问题解决了!!

安迪

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM