Time() 库要求无法访问的格式
Time() library asking for unreachable format
在对 google 议程进行测试时,我想进行测试以查看事件当前是否正在发生。
我的方法是检查当前时间(由时间库给出)
datetime.now().time()
然后使用描述比较它再次使用时间库
print(event['start'].get('dateTime', event['start'].get('date'))) # Will output 2021-02-09T10:45:00+01:00
然后我解析这个得到:
event_start = (start.split("T", 1)[1]).split("+")[0][:-3].replace(":", ",")
print(event_start) # Will output 10,45 which is the beginning of the event
最后,我使用在 Whosebug 上找到的这个函数来查看我们是否在事件中,方法是检查当前时间是否在事件的开始和结束之间
def is_time_between(begin_time, end_time, check_time=None):
check_time = check_time or datetime.now().time()
if begin_time < end_time:
return check_time >= begin_time and check_time <= end_time
else:
return check_time >= begin_time or check_time <= end_time
我的问题出在输入格式上。要比较时间,格式必须是 XX:XX:XX ,您可以使用 time(X,X):
获得
#example
print(time(10,45)) # Will output 10:45:00
但是当我在前一个event_start上使用它时,我得到了
time(event_start)
#TypeError: an integer is required (got type str)
我知道你要告诉我使用 int 转换它,但我会在 coma 10.1 -> 10 之后丢失数据并且不接受浮点数
最后我的主要问题是:考虑到输入是:
,如何使用 googe api 输入确定您是否在使用布尔值作为输出的当前事件期间
{'dateTime': '2021-02-09T12:15:00+01:00', 'timeZone': 'Europe/Paris'}, 'end': {'dateTime': '2021-02-09T14:15:00+01:00', 'timeZone': 'Europe/Paris'}
首先,通常 2021-02-09T10:45:00+01:00
并不意味着它持续了一个小时,而是您的时区偏移为 +1 小时,这是许多中欧国家 (CET) 的时区。所以也许你想得到不同的表示。您确定 +01:00
真的代表持续时间吗?
如果 +01:00
确实是你的持续时间,你可以实现你想要的,如果你去掉了 +01:00
,只需进行字符串比较即可。例如,您可以这样做:
import datetime
checktime = str(datetime.datetime.now()).replace(' ', 'T')
eventtime = event['start'].get('dateTime', event['start'].get('date')) # Will output 2021-02-09T10:45:00+01:00
starttime = eventtime.split('+')[0]
duration = eventtime.split('+')[1].split(':')
duration = datetime.timedelta(hours=duration[0], minutes=duration[1])
starttime_obj = datetime.datetime.strptime(starttime, '%Y-%m-%dT%H:%M:%S')
endtime = str(starttime_obj + duration)
happened_between = checktime > starttime and checktime < endtime
请注意,这不是最干净的解决方案,更好的方法是使用日期时间对象,正如@DeepSpace 指出的那样。
更新
在确认确实是偏移量后,您可以改为执行以下操作:
import datetime
import pytz
starttime_str = event['start'].get('dateTime', event['start'].get('date')) # Will output 2021-02-09T10:45:00+01:00
endtime_str = event['end'].get('dateTime', event['end'].get('date'))
checktime = pytz.utc.localize(datetime.datetime.utcnow())
starttime = datetime.datetime.strptime(starttime_str, '%Y-%m-%dT%H:%M:%S%z')
endtime = datetime.datetime.strptime(endtime_str, '%Y-%m-%dT%H:%M:%S%z')
happened_between = checktime > starttime and checktime < endtime
在对 google 议程进行测试时,我想进行测试以查看事件当前是否正在发生。 我的方法是检查当前时间(由时间库给出)
datetime.now().time()
然后使用描述比较它再次使用时间库
print(event['start'].get('dateTime', event['start'].get('date'))) # Will output 2021-02-09T10:45:00+01:00
然后我解析这个得到:
event_start = (start.split("T", 1)[1]).split("+")[0][:-3].replace(":", ",")
print(event_start) # Will output 10,45 which is the beginning of the event
最后,我使用在 Whosebug 上找到的这个函数来查看我们是否在事件中,方法是检查当前时间是否在事件的开始和结束之间
def is_time_between(begin_time, end_time, check_time=None):
check_time = check_time or datetime.now().time()
if begin_time < end_time:
return check_time >= begin_time and check_time <= end_time
else:
return check_time >= begin_time or check_time <= end_time
我的问题出在输入格式上。要比较时间,格式必须是 XX:XX:XX ,您可以使用 time(X,X):
获得#example
print(time(10,45)) # Will output 10:45:00
但是当我在前一个event_start上使用它时,我得到了
time(event_start)
#TypeError: an integer is required (got type str)
我知道你要告诉我使用 int 转换它,但我会在 coma 10.1 -> 10 之后丢失数据并且不接受浮点数
最后我的主要问题是:考虑到输入是:
,如何使用 googe api 输入确定您是否在使用布尔值作为输出的当前事件期间{'dateTime': '2021-02-09T12:15:00+01:00', 'timeZone': 'Europe/Paris'}, 'end': {'dateTime': '2021-02-09T14:15:00+01:00', 'timeZone': 'Europe/Paris'}
首先,通常 2021-02-09T10:45:00+01:00
并不意味着它持续了一个小时,而是您的时区偏移为 +1 小时,这是许多中欧国家 (CET) 的时区。所以也许你想得到不同的表示。您确定 +01:00
真的代表持续时间吗?
如果 +01:00
确实是你的持续时间,你可以实现你想要的,如果你去掉了 +01:00
,只需进行字符串比较即可。例如,您可以这样做:
import datetime
checktime = str(datetime.datetime.now()).replace(' ', 'T')
eventtime = event['start'].get('dateTime', event['start'].get('date')) # Will output 2021-02-09T10:45:00+01:00
starttime = eventtime.split('+')[0]
duration = eventtime.split('+')[1].split(':')
duration = datetime.timedelta(hours=duration[0], minutes=duration[1])
starttime_obj = datetime.datetime.strptime(starttime, '%Y-%m-%dT%H:%M:%S')
endtime = str(starttime_obj + duration)
happened_between = checktime > starttime and checktime < endtime
请注意,这不是最干净的解决方案,更好的方法是使用日期时间对象,正如@DeepSpace 指出的那样。
更新
在确认确实是偏移量后,您可以改为执行以下操作:
import datetime
import pytz
starttime_str = event['start'].get('dateTime', event['start'].get('date')) # Will output 2021-02-09T10:45:00+01:00
endtime_str = event['end'].get('dateTime', event['end'].get('date'))
checktime = pytz.utc.localize(datetime.datetime.utcnow())
starttime = datetime.datetime.strptime(starttime_str, '%Y-%m-%dT%H:%M:%S%z')
endtime = datetime.datetime.strptime(endtime_str, '%Y-%m-%dT%H:%M:%S%z')
happened_between = checktime > starttime and checktime < endtime