python pytz 检查时间是否在 sydney/melbourne 时间之间而不是 utc
python pytz check if time is between on sydney/melbourne time not 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
我在使用 imports 和 froms 时遇到了多个错误,但当前错误是:
descriptor 'time' requires a 'datetime.datetime' object but received a 'Australia/Sydney'
我发现如果你使用这个 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)
在进行比较之前,将您输入的时间转换为日期。还要注意让他们知道时区。我已经调整了你的方法,这有效并且 returns 在 Australia/Sydney:
当前本地时间的正确结果
from datetime import datetime, date, time
import pytz
def is_time_between(begin_time, end_time):
tz = pytz.timezone('Australia/Sydney')
now = datetime.now(tz)
begin_date = datetime.combine(date(now.year, now.month, now.day), begin_time, tzinfo=now.tzinfo)
end_date = datetime.combine(date(now.year, now.month, now.day), end_time, tzinfo=now.tzinfo)
if begin_time < end_time:
return now >= begin_date and now <= end_date
else: # crosses midnight
return now >= begin_date or now <= end_date
print(is_time_between(time(6, 59, 45), time(18, 10)))
print(is_time_between(time(22, 00), time(23, 00)))
print(is_time_between(time(21, 00), time(7, 00)))
print(is_time_between(time(23, 30), time(7, 00)))
输出:
False
True
True
False
(使用 Python 3.8.0 测试)
我有这张支票
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
我在使用 imports 和 froms 时遇到了多个错误,但当前错误是:
descriptor 'time' requires a 'datetime.datetime' object but received a 'Australia/Sydney'
我发现如果你使用这个 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)
在进行比较之前,将您输入的时间转换为日期。还要注意让他们知道时区。我已经调整了你的方法,这有效并且 returns 在 Australia/Sydney:
当前本地时间的正确结果from datetime import datetime, date, time
import pytz
def is_time_between(begin_time, end_time):
tz = pytz.timezone('Australia/Sydney')
now = datetime.now(tz)
begin_date = datetime.combine(date(now.year, now.month, now.day), begin_time, tzinfo=now.tzinfo)
end_date = datetime.combine(date(now.year, now.month, now.day), end_time, tzinfo=now.tzinfo)
if begin_time < end_time:
return now >= begin_date and now <= end_date
else: # crosses midnight
return now >= begin_date or now <= end_date
print(is_time_between(time(6, 59, 45), time(18, 10)))
print(is_time_between(time(22, 00), time(23, 00)))
print(is_time_between(time(21, 00), time(7, 00)))
print(is_time_between(time(23, 30), time(7, 00)))
输出:
False
True
True
False
(使用 Python 3.8.0 测试)