簡體   English   中英

通過 O365 從 Microsoft Calendar 查詢獲取一天中的全天類型事件的問題

[英]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 2event 2event 4 ,但我也得到了前一天的dummy 1

2022-09-19_12-14


[更新]:

顯然,這個問題的原因是 +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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM