関連する日付を収集せずにユーザーから時刻を収集する必要がある場合があります。たとえば、ユーザーが毎日実行する繰り返しイベントを同時に設定している場合などです。 DjangoのTimeField
はタイムゾーンで再生されません。しかし、この特定のケースでは(おそらくあなた自身で時刻を記録するときは)、タイムゾーンが重要な要素です。だから、どのようにタイムゾーン対応の時間を保存しますか?TimeFieldをタイムゾーン対応にするには?
6
A
答えて
4
答えはありません。タイムゾーンを認識するためには、それに関連付けられた日付が必要です。このため私のソリューションは、モデルにDateTimeField
を使用するので、のような形を上書きすることだった...夏時間を考える:
# Model
class MyModel(models.Model):
time_of_day = models.DateTimeField()
# Form Fields
from django.forms.util import from_current_timezone
from django.forms.util import to_current_timezone
from django.utils import timezone
class TzAwareTimeField(forms.fields.TimeField):
def prepare_value(self, value):
if isinstance(value, datetime.datetime):
value = to_current_timezone(value).time()
return super(TzAwareTimeField, self).prepare_value(value)
def clean(self, value):
value = super(TzAwareTimeField, self).to_python(value)
dt = to_current_timezone(timezone.now())
return dt.replace(
hour=value.hour, minute=value.minute,
second=value.second, microsecond=value.microsecond)
# Forms
class MyForm(forms.ModelForm):
time_of_day = TzAwareTimeField()
0
これはテストされていないと不完全です:
class TimeFieldWithZone(TimeField):
def db_type(self, connection):
if (connection.settings_dict['ENGINE'] ==
'django.db.backends.postgresql_psycopg2'):
return 'time with time zone'
raise Exception('Unsupported database type')
def get_db_prep_value(self, value, *args, **kwargs):
try:
return super(TimeFieldWithZone, self).get_db_prep_value(
value, *args, **kwargs)
except ValueError:
return six.text_type(value)
これが使用されますPostgresのtime with time zone
データ型。 'HH:MM:SS.mmmmmm + HH:MM'の形式で文字列を渡すと、auto_nowを使用して邪魔になります。
あなたはUTC以外のタイムゾーンで時間を挿入しようとすると例外がスローされ、一般的なバックエンドのコードで編集
。 2
編集私は文字列にタイムゾーンを備えtime
を変換するget_db_prep_value
更新添加が、提供時間帯は、(日付無し曖昧であってもよい)UTCオフセットを出力する場合にのみ動作します。
time with time zone
はちょっと誤解されているようです...私が言うことができる限り、実際にはタイムゾーンではなく、UTCオフセットで時刻を保存します。したがって、返された値を取り、カレンダーの日付を追加し、夏時間に関する適切な時刻を取得することは困難です。
関連する問題
- 1. AndroidのString.format()はタイムゾーン対応ですか?
- 2. ユニットテストDjangoタイムゾーン対応日時
- 3. PHP - タイムゾーンの対応方法
- 4. 複数インスタンスのタイマーをタイムゾーン対応に拡張する
- 5. 複数のタイムゾーンに対応するGrailsアプリケーション
- 6. DjangoでTimeFieldをモデル化するには?
- 7. Django-rest-frameworkタイムゾーン対応レンダラー/パーサー
- 8. TZ対応のdatetimestamp間のタイムゾーン変換
- 9. タイムゾーン対応のタイムスタンプをsqlite3にpythonで保存する方法は?
- 10. タイムゾーン対応アプリケーションを構築する際のベストプラクティス
- 11. タイムゾーンの古いデータに対応するライブラリがありますか?
- 12. すぐに対応するには?
- 13. (タイムゾーン対応)pythonを使ったnetcdfのdatetime
- 14. Rは、対応する列には値
- 15. イベントのタイムゾーン対応asp.net Webサイト:UTCとローカル日時
- 16. タイムゾーン対応(MomentJS)と同じページの設定jQuery.countdown複数のインスタンスに
- 17. ggplot2に対応するロケータ
- 18. ネイティブスケジューリングに対応する
- 19. モバイルデバイスに対応するブートストラップ
- 20. プロセスに対応するセマフォー?
- 21. ネイティブマップインテグレーションに対応する
- 22. ボタンダウンに対応するキーダウン
- 23. アンドロイドに対応するネイティブリダイレクト
- 24. DateFieldとTimeFieldのフィルタモデル
- 25. DjangoビューでDjango TimeFieldを作成する
- 26. オートコンプリートテキスト入力の都市リストと対応するタイムゾーンが必要です
- 27. ネイティブドラッグアンドドロップに対応
- 28. ネイティブエクスポビルディングスタンドアロンアプリに対応
- 29. タイムゾーンに応じて日付を変換する方法
- 30. Pythonのタイムゾーン対応のdatetimeオブジェクトからUTCタイムスタンプを取得します
あなたのopening文(とDjangoの動作)は、Pythonが 'time'オブジェクトをどのように扱うかとは異なります。 Pythonの 'time'オブジェクトは' tzinfo'フィールドを持つことができます。これは、日付が関連付けられていないタイムゾーンを認識できる 'time'オブジェクトを可能にします。私はちょうどこの問題をDjangoの 'Day'モデルで' open_time'と 'close_time'' TimeField'sに渡しました。これらの時代は理想的にはタイムゾーンを意識したものになるでしょうが、Djangoはそれをサポートしていないためではありません。 – jbg
これは古いですが、まだ便利なので、 'from_current_timezone'に' clean'メソッドの戻り値をラップする必要があると私は指摘したいと思います。 –