2017-12-07 6 views
1

タイムゾーン対応のWebアプリケーションを開発するのはこれが初めてです。私はDjango 1.11.7を使用しています。私はタイムゾーンに関する多くの記事を見てきました。正直なところ、私はタイムゾーンのコンセプトを理解できないように感じ始めています... 0_0Djangoタイムゾーン認識 - UTCに格納されるデータ

予約ごとにstart_timeend_timeの予約アプリケーションを作っています。

私は、ユーザが自分のタイムゾーンで自分の経験した日時を入力できることを期待しています。一方、これらの日付と時刻は、postgresqlデータベースにUTC形式で格納します。

Five hour timezone difference between UTC and Ottawa

私は予約して選択した場合は、例えば、午前12時と午前2(今日)の間で、データベース内の結果は午後5時と午後7時(今日)の間に表示されるはずです。

Djangoの国際化設定:データベースの作成時に

LANGUAGE_CODE = 'en-us' 

TIME_ZONE = 'UTC' 

USE_TZ = True 
USE_L10N = True 
USE_I18N = True 

:Djangoの管理ページ機能に建てを使用して

start_time  TIMESTAMP WITH TIME ZONE NOT NULL, 
end_time  TIMESTAMP WITH TIME ZONE NOT NULL 

、私は次の情報を入力します。

Admin form showing note about the time difference

私は、データベースに結果を見ると10

はしかし、ここで私が得るものです:

2017-12-05 19:00:00-05 | 2017-12-05 20:59:59-05 

私が期待したものとは反対の方向に変化し格納された結果。私は期待していた:

2017-12-06 05:00:00+05 | 2017-12-06 07:00:00+05 

を私の期待が間違っていると、すべてが正常に動作しているあなたは、私はそれを読んだとき、私はタイムゾーンをどのように解釈すべきか私に説明することができれば、私は感謝される場合。

私の期待が正しい場合は、何かアドバイスをいただければ幸いです。

ありがとうございます。

+0

ようこそStackOverflow。次回は、外部サイトにリンクするのではなく、エディタボタンを使用して[画像をインラインで挿入](https://stackoverflow.com/editing-help#images)してください。私はこの質問であなたのためにそれをしました。 –

答えて

0

ここでの基本的な問題は、管理者があなたのために何をしているのか誤解していることです(「自分がタイムゾーンで自分の経験した日時を入力できるようにすることを期待しています)。実際、管理者はサーバーのタイムゾーン内のすべての日付時刻を解釈します(ケースではUTC)。

注:サーバー時間から5時間遅れ

ているが、実際に意味:

警告:ここで入力した値は、サーバーのタイムゾーンで解釈され、5時間進んでいますあなたの。

は(私はこの文言があいまいであることをあなたに同意。あなたはそれを向上させることについてfile a ticketすることがあります。)

この問題の背景については、this ticketを参照してください。問題の根源は、ブラウザでユーザーのタイムゾーンを取得する方法がないことです。あなたができることは、ブラウザーの現在の時刻とサーバーの現在の時刻を比較し、違う場合は上の警告を掲示することです。

datetimeをユーザーのタイムゾーンで解釈したい場合は、タイムゾーンを明示的に指定し、どこかに記録してからactivate()を指定して、現在のタイムゾーンにするようにユーザーに求めることはできません。これはテクニックdescribed in the documentationです。 pyzのタイムゾーンのリストに基づいてタイムゾーン選択ウィジェットを提供するサードパーティのパッケージがあると私は信じています。

あなたはまた時間表示を誤読しています。あなたが期待していたのは2017-12-06 05:00:00+00だと思います。その代わりに、結果は(UTC)、または等価で、オタワ時間に2017-12-05 19:00:00-05であり、これは報告したものです。

0

https://www.google.co.jp/search?dcr=0&q=ottawa+timezone&spell=1&sa=X&ved=0ahUKEwjX0LnA5_bXAhVFjJQKHXCdBDYQvwUIJigA&biw=1394&bih=803

オタワタイムゾーンは-5。

手動でタイムゾーンが正しくあなたがこのフィルタと異なるタイムゾーンに登録した時間を示すことにより、登録されているのテンプレートでテストすることができます。

https://docs.djangoproject.com/en/1.11/topics/i18n/timezones/#std:templatefilter-timezone

0

私はホテルの予約を非常に同様の問題がありました。この答えは私を正しい軌道に乗せた。

https://stackoverflow.com/a/18307581/4660189

ここで重要なのは、あなたが言ったことである:

私は、ユーザーが、彼は彼のタイムゾーンでそれらを経験すると、日付と時刻を入力することができることを期待しています。

"his timezone"はミドルウェアを介して処理する必要があります。各ユーザにタイムゾーンを割り当てることができるように、システムはそれに応じてこのユーザのすべての時間/日付を処理する。

これはあなたに行くはずです。ハッピーコーディングと時間帯の心を曲げる心を歓迎します。

関連する問題