首页 > 解决方案 > python pytz检查时间是否在悉尼/墨尔本时间而不是UTC之间

问题描述

我有这张支票

if is_time_between(time(6,59,45), time(18,10)):

我想检查当前时间是否在我通过的两次之间。我想我很接近。

#from datetime import timezone, datetime, timedelta
from datetime import datetime, time
#import time
import pytz
import dateutil.parser
#from pytz import timezone
    
def is_time_between(begin_time, end_time):
            tz = pytz.timezone('Australia/Sydney')
            check_time = datetime.time(tz)
            if begin_time < end_time:
                return check_time >= begin_time and check_time <= end_time
            else: # crosses midnight
                return check_time >= begin_time or check_time <= end_time

我在使用 import 和 froms 时遇到了多个错误,但当前的错误是:

descriptor 'time' requires a 'datetime.datetime' object but received a 'Australia/Sydney'

标签: pythondatetimepytz

解决方案


我发现,如果你使用这个 strftime(),你可以使用 pytz 进行转换,尽管你必须将你正在检查的东西也设为字符串以便它可以比较,否则你正在比较 str 和 datetime.time,这是一个错误

def is_time_between(begin_time, end_time, check_time=None):
    # If check time is not given, default to current UTC time
    tz_Aus = pytz.timezone('Australia/Sydney')
    datetime_Aus = datetime.now(tz_Aus)
    check_time = datetime_Aus.strftime("%H:%M:%S")
    if begin_time < end_time:
        return str(check_time) >= str(begin_time) and str(check_time) <= str(end_time)
    else: # crosses midnight
        return str(check_time) >= str(begin_time) or str(check_time) <= str(end_time)

推荐阅读