3

だから私はファイルから時刻表を読み取り、それを Google カレンダーに入れる Python を介して小さな App Engine アプリケーションを作成しています。時刻表のすべての時刻/日付は DST とは無関係であるため、同じ方法でイベントを配置する必要があります。これは、すべてのイベントが複数の DST 期間にわたって毎週繰り返されるという事実によって複雑になります。

カレンダー API V3 を使用しています。

このために独自のカレンダーを作成することから始めます。

calander = {
    'summary': 'Calender Name,
    'location': 'Somewhere in Ireland',
    'timeZone': 'GMT',
}

次に、さまざまな定期的なイベントを入力します

event = {
    'summary': 'CS101',
    'description': 'Intro to Comp Sci',
    'location': 'Bla bla bla',
    'start': {
        'dateTime': '2012-10-03T10:00:00.000-00:00',
        'timeZone': 'GMT'
    },
    'end': {
        'dateTime': '2012-10-03T11:00:00.000-00:00',
        'timeZone': 'GMT'
    },
    'recurrence': [
        'RRULE:FREQ=WEEKLY;UNTIL=20121231',
    ],
}

もちろん、私の実際のプログラムでは、これらの文字列はすべて動的に生成されていますが、ここでは問題ありません。

問題は、夏時間の DST 期間中に発生するイベントは、指定した時間より自動的に 1 時間遅れることです。イベントとカレンダーのタイムゾーンを GMT に設定しているので、これはバグだと確信していますが、GMT は夏時間を観察しません。私が食べている時間には何もすべきではありません。

たとえば、時刻表によると、9 月 1 日から 12 月 31 日までの毎週月曜日の午前 10 時から午前 11 時までイベントが開催されます。この情報がカレンダーに入力された場合、10 月 28 日 (ヨーロッパのフォールバック日) より前のすべてのイベントは、タイムテーブルの時刻より 1 時間遅れます。夏休み以外はいつでもOKです。

イベントが午前 10 時に開始することをカレンダーに伝えた場合、DST に合わせて調整したくありません。どうすればこれを回避できますか?

4

2 に答える 2

1

start.dateTime と end.dateTime にもタイムゾーンが定義されている可能性がありますか? これを行うと、timeZone フィールドが完全に認識されないようです。日付を「2012-09-26T10:00:00.000-00:00」から「2012-09-26T10:00:00.000」に変更してみてください [ API->start.dateTime ]

GMT には DST がないため、10:00 GMT から開始するようにカレンダー イベントを指定した場合、現地時間を「ヨーロッパ/ダブリン」に設定してカレンダー ビューを表示すると、これらのイベントは 11:00 に開始されます。夏時間は+1です。

タイムゾーンの「独立」とはどういう意味かわかりませんが、

1) アイルランド時間の 10:00 から 12 月までの定期的なイベントが必要な場合 (掛け時計に表示されます)、次のようにします。

{
  "start": {
    "dateTime": "2012-09-26T10:00:00.000",
    "timeZone": "Europe/Dublin"
  },
  "end": {
    "dateTime": "2012-09-26T11:00:00.000",
    "timeZone": "Europe/Dublin"
  },
  "summary": "CS101 Dublin",
  "description": "Intro to Comp Sci",
  "location": "Bla bla bla",
  "recurrence": [
    "RRULE:FREQ=WEEKLY;UNTIL=20121131"
  ]
}

2) 12 月まで毎週 10:00 GMT にイベントを開始したい場合 (アイルランドでは常に冬時間に設定されている時計に示されているように)、次のようにします。

{
  "start": {
    "dateTime": "2012-09-26T10:00:00.000",
    "timeZone": "GMT"
  },
  "end": {
    "dateTime": "2012-09-26T11:00:00.000",
    "timeZone": "GMT"
  },
  "summary": "CS101 GMT",
  "description": "Intro to Comp Sci",
  "location": "Bla bla bla",
  "recurrence": [
    "RRULE:FREQ=WEEKLY;UNTIL=20121131"
  ]
}

これにより、タイムゾーンが「Europe/Dublin」に設定されたカレンダー UI に表示されると、11:00 から 2012 年 10 月 31 日までのイベントが作成され、イベントは 10:00 に開始されます。カレンダー UI の花ボタン -> 設定 -> あなたのタイムゾーンで異なるタイムゾーンの表示を切り替えることができます。

しかし、ローカル時間で指定された時間で始まる CS コースのように聞こえるので、ここでは (1) が必要だと思います。

ところで、API エクスプローラーがかなり便利な場合は、試してみると: https://developers.google.com/apis-explorer/#s/calendar/v3/

于 2012-10-07T10:49:24.210 に答える
0

GMT はサマータイムに対応していません。現地時間 (アイルランドの場合は IST) を使用する必要があります。説明。DST の開始日と終了日は国によって異なります。

于 2012-10-06T21:08:05.037 に答える