[英]problem with the query of getting all-day type events on a day from microsoft calendar by O365
我在查詢使用O365庫從 Microsoft 日歷獲取一天的全天類型事件時遇到問題。 實際上,我將通過查詢獲取特定日期的事件,問題是我還從前一天獲得了一個額外的全天事件!
我的 ms-calendar 時區設置為伊斯坦布爾; 隨后,查詢的開始日期和結束日期也通過 aware-datetime 在伊斯坦布爾時區。
這是我到目前為止所做的:
...
start_date = pytz.timezone("Europe/Istanbul").localize(datetime(2022, 9, 18))
end_date = pytz.timezone("Europe/Istanbul").localize(datetime(2022, 9, 19))
q = calendar.new_query('start').greater_equal(start_date)
q.chain('and').on_attribute('end').less(end_date)
events = calendar.get_events(query=q, include_recurring=True)
pprint(
[
(
g.to_api_data()["subject"],
g.to_api_data()["start"],
g.to_api_data()["end"]
) for g in events])
出去:
[('dummy 1',
{'dateTime': '2022-09-17T03:00:00', 'timeZone': 'Turkey Standard Time'},
{'dateTime': '2022-09-18T03:00:00', 'timeZone': 'Turkey Standard Time'}),
('event 2',
{'dateTime': '2022-09-18T00:00:00', 'timeZone': 'Turkey Standard Time'},
{'dateTime': '2022-09-18T00:30:00', 'timeZone': 'Turkey Standard Time'}),
('dummy 2',
{'dateTime': '2022-09-18T03:00:00', 'timeZone': 'Turkey Standard Time'},
{'dateTime': '2022-09-19T03:00:00', 'timeZone': 'Turkey Standard Time'}),
('event 4',
{'dateTime': '2022-09-18T23:30:00', 'timeZone': 'Turkey Standard Time'},
{'dateTime': '2022-09-19T00:00:00', 'timeZone': 'Turkey Standard Time'})]
正如您在下面的屏幕截圖中看到的,我的期望是得到dummy 2
、 event 2
和event 4
,但我也得到了前一天的dummy 1
!
[更新]:
顯然,這個問題的原因是 +3 小時(土耳其時間)已添加到全天事件的時間而不是正常事件。
我按如下方式繞過了這個問題——向前和向后添加 1 秒:
from datetime import timedelta
...
start_date = pytz.timezone("Europe/Istanbul").localize(datetime(2022, 9, 18))
end_date = pytz.timezone("Europe/Istanbul").localize(datetime(2022, 9, 19))
start_date += timedelta(seconds=1)
end_date += timedelta(seconds=-1)
...
出去:
[('event 2',
{'dateTime': '2022-09-18T00:00:00+03:00', 'timeZone': 'Europe/Istanbul'},
{'dateTime': '2022-09-18T00:30:00+03:00', 'timeZone': 'Europe/Istanbul'}),
('dummy 2',
{'dateTime': '2022-09-18T00:00:00+03:00', 'timeZone': 'Europe/Istanbul'},
{'dateTime': '2022-09-19T00:00:00+03:00', 'timeZone': 'Europe/Istanbul'}),
('event 4',
{'dateTime': '2022-09-18T23:30:00+03:00', 'timeZone': 'Europe/Istanbul'},
{'dateTime': '2022-09-19T00:00:00+03:00', 'timeZone': 'Europe/Istanbul'})]
此外,關於增加的額外 +3 小時,我不得不說,這不是主要問題,因為它對查詢無關緊要,它只是我自己修復的日期時間的表示,我是去 go 向 O365 發送PR 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.