2

そうですね、ちょっとややこしいので上から説明してみます!

私はRails Webアプリを持っています。これは社内アプリであり、英国でのみ使用されます。アプリが行うことの 1 つは、会議の管理です。ミーティングには開始日時があります。フォームには日付/時刻ピッカーがあり、ユーザーは会議の日付と時刻を選択できます。この日付をそのままデータベースに保存します。すべての会議は 2 時間続くため、終了時間は単純に開始時間 + 2 時間です。

例:

2013-06-23 6:45PM in the form is stored in the db as 2013-06-23 18:45:00
2013-12-23 6.45pm in the form is stored in the db as 2013-12-23 18:45:00

最初の日付は夏時間 (BST) の期間で、2 番目の日付は GMT の期間であることに注意してください。それがGMTであろうとBSTであろうと、実際には気にしません。会議は絶対にその時間に行われます。

Rails webapp 内では、DB から正確な日付と時刻を出力するだけです。もちろん、適切にフォーマットされています!

さて、ある時点で、会議の主催者と会議の相手に電子メールを送信します。この電子メールには、会議の日時などが記載されており、(通常は Outlook ですが、Apple または gmail も) カレンダーに入れるための iCal (.ics) ファイルも含まれています。

私が抱えている問題は、(上記の例を使用して) Outlook で会議が次のように表示されることです。

Meeting #1: Start: 23/06/2013 7:45pm, End: 23/06/2013 9:45pm
Meeting #2: Start: 23/12/2013 6:45pm, End: 23/12/2013 8:45pm

BST/GMT のために最初のものを調整したことに注意してください。

.ics ファイルのテキストには、次のコードが含まれています。

ミーティング #1:

BEGIN:VCALENDAR
...
DTEND:20130623T204500Z
DTSTART:20130623T184500Z
...
END:VCALENDAR

ミーティング #2:

BEGIN:VCALENDAR
...
DTEND:20131223T204500Z
DTSTART:20131223T184500Z
...
END:VCALENDAR

そのため、Z タイムゾーン (UTC) を使用して日付/時刻をエンコードしています。これが、Outlook が #1 の UTC 時間を BST 時間に誤って変換し、#2 をそのままにしておく理由を理解しています (GMT == UTC のため)。

私の質問は、どうすればこれを止めることができますか? GMT/BST に関係なく、会議の予定時刻を絶対的な実際の時刻にしたい: 午後 6 時 45 分

日時を UTC として DB に保存する必要がありますか? これはどのように行われますか (会議の開始日だけでなく、すべての日付に適用されると思います)。そして、それらをwebappに表示するときにそれらを実際の日時に再変換する方法は?

おまけ: initializers/time_formats.rb に次のようなエントリがあります:

:ical => "%Y%m%dT%H%M00Z" 

したがって、日付は「20130623T184500Z」のようになります。私はicsを構築するときにこれを使用します。そして、これが問題だと思います-日付/時刻がBST中にある場合、Zを使用したくないのですが、何か他のものはありますか?

4

2 に答える 2