2017-07-11 7 views
0

私はicsカレンダーからAlexa Skill to read local eventsを構築するエクササイズを行った。午後7時から始まるイベントがある場合はいつでも、その翌日にスキルが読み上げられます。Alexaカレンダー:Amazon LambdaローカルとUTCタイムゾーンの不一致

これはタイムゾーンの問題のようです。 Amazon Lambdaのロジックをホストしています。これはUTCに設定されていると思います。 GoogleカレンダーをUTCに設定しても問題ありません。私のJavaScriptのnode.jsコードにprocess.env.TZ = 'America/New_York'を追加しても役に立ちません。

プライバシーの理由から、私はAlexaユーザーのタイムゾーンを見つけることはできません。しかし、スキルユーザーのタイムゾーンを見つける必要はありません。なぜなら、彼らは私のローカルイベントカレンダー、Eastern Daylightと同じタイムゾーンにいることを前提としているからです。私がする必要があるのは、午後7時から現地時間の深夜までのイベントが翌日には起こらないことをラムダが知っていることだけです。私は何ができるのですか?ありがとう。

答えて

3

UTCは過去と将来の時間の曖昧で決定的な時間帯です。

たとえば、01:59:59の1秒後の時刻がと決まっていない場合は、は03:00:00となります。一方、米国/東部では、春にはこれを1年に1回経験します。逆に、秋には1日に2回、壁時計時刻02:59:59が1時間に2回、1時間おきに発生します。しかし、UTCでは、これらの2つの時刻は、3600秒離れた2つの異なる値によって正しく表されます。

datetimesを処理するアプリケーションを設計するときは、datetimesをUTCとして保存し、タイムゾーンライブラリを使用して変換することが適切な解決策であるという議論の余地はほとんどありません。可逆変換を保証する唯一の方法は、UTCに変換することです。

Google calendar follows this best practiceイベントをローカルタイムゾーンに格納せず、代わりにすべてのイベントをUTCとして変換して保存してから、カレンダーのタイムゾーン設定に従って再度変換して表示します。

もしユーザーがAmerica/New_Yorkに基づいてイベントを聞きたいならば、タイムゾーンライブラリを使ってシステムの日付と時刻の両方を変換することができます(すべてのサーバーは常に "local"タイムゾーンはUTCに設定されていますが、これはラムダのケースです)と、比較を行う前のUTCからターゲットタイムゾーンまでのイベントの日付/時刻です。

おそらく、GoogleカレンダーAPIにタイムゾーンの設定を照会し、その値をコンバージョンに使用することもできます。または、ユーザーに尋ねることができます。

関連する問題