OpenERPでは、現在の日付と時刻を印刷しようとすると、常に 'UTC'時間が表示されます。しかし、私はユーザーのタイムゾーンで時間を取得したい。各ユーザーのタイムゾーンは異なります。 For example 'CST6CDT'
、 '米国/太平洋'または 'アジア/カルカッタ'。だから私は、レポートに正しい日時を表示できるように、ユーザーのタイムゾーンで時間を取得する必要があります。私は、datatimeモジュールでlocalize()とreplace()関数を使用してタイムゾーンを変更しようとしました。しかし、私は正しい出力を得ていませんでした。Pythonでサーバーのタイムゾーン(UTC)以外のユーザーのローカルタイムゾーンを取得する方法は?
答えて
from datetime import datetime
from pytz import timezone
fmt = "%Y-%m-%d %H:%M:%S"
# Current time in UTC
now_utc = datetime.now(timezone('UTC'))
print now_utc.strftime(fmt)
# Convert to US/Pacific time zone
now_pacific = now_utc.astimezone(timezone('US/Pacific'))
print now_pacific.strftime(fmt)
# Convert to Europe/Berlin time zone
now_berlin = now_pacific.astimezone(timezone('Europe/Berlin'))
print now_berlin.strftime(fmt)
提供:http://www.saltycrane.com/blog/2009/05/converting-time-zones-datetime-objects-python/
OpenERP 6.1サーバー側で起こっ全てのPythonの操作のタイムゾーンのとおり(とモジュールに)UTCことを余儀なくされています。これは、さまざまな場所で説明された設計の決定でした[1]。ユーザーのタイムゾーンでの日時値のレンダリングは、クライアント側で排他的に行われることを意味します。
サーバー側でUTCではなくユーザーのタイムゾーンを使用するのは意味があるケースはほとんどありませんが、クライアント側で変換する機会がないため、結果のレポートの内容。
レポートエンジンでは、レポートのコンテキストで提供されているformatLang()
メソッド(RMLベースの方法以上)を使用すると、ユーザーがコールするとユーザーのタイムゾーンに従って日付がフォーマットされますそれはdatetime値とdate_time=True
(RPC呼び出しで渡され、ユーザーのタイムゾーン設定に基づいてtz
コンテキスト変数を使用します) これは公式アドオンでどのように使用されているかの例を見つけることができます。たとえば、delivery module (l.171)です。
implementationはformatLang()
です。変換の実際の仕組みを知りたい場合は、implementationをご覧ください。
[1]:OpenERP 6.1 release notes、other question、およびbug 918257またはbug 925361のコメント#4を参照してください。
Thanks Odony。ジャスパーレポートにタイムゾーンを渡したい。ジャスパーサーバーに正しく渡されませんでした。だから私は地元の時間をジャスパー報告書に渡した – OmaL
から:http://help.openerp.com/question/30906/how-to-get-users-timezone-for-python/
DATETIME_FORMAT = "%Y-%m-%d %H:%M:%S"
import pytz
from openerp import SUPERUSER_ID
# get user's timezone
user_pool = self.pool.get('res.users')
user = user_pool.browse(cr, SUPERUSER_ID, uid)
tz = pytz.timezone(user.context_tz) or pytz.utc
# get localized dates
localized_datetime = pytz.utc.localize(datetime.datetime.strptime(utc_datetime,DATETIME_FORMAT)).astimezone(tz)
DateInUTCユーザーのタイムゾーンに変換するには
を変換する= <〜時間変数:
LocalizedDate = fields.datetime.context_timestamp(cr, uid, DateInUTC, context=context)
オフセットを削除するには:
LocalizedDate = LocalizedDate.replace(tzinfo=None)
- 1. のiOS:デバイスのローカルタイムゾーンにUTCタイムゾーンを変換
- 2. Pythonでシステムのローカルタイムゾーンを取得
- 3. ユーザーのタイムゾーンをKRLで取得する
- 4. UTCのファイル修正日をPythonから取得する方法
- 5. 現在のユーザー以外のfacebooker2でプロフィール画像を取得する方法
- 6. Unix時間に変換するときのタイムゾーン(UTC)の指定方法は? (Python)
- 7. iphoneタイムゾーンを取得する方法は?
- 8. Dで現在のUTC時刻を取得する方法は?
- 9. MySQL:ローカルタイムゾーンへのUTCの自動マッピング
- 10. javascript: 'utc date'を取得する方法
- 11. Facebook:ユーザーの友達のタイムゾーンを取得
- 12. Spring MVC - ユーザーのタイムゾーンの日付をUTCに変換する
- 13. PythonでUTCの日付文字列を取得するには?
- 14. PythonのロギングライブラリでOSユーザーのユーザー名を取得する方法は?
- 15. Pythonでの問題/ pytzローカルタイムゾーンからUTCへの変換後に戻る
- 16. デフォルトのタイムゾーン以外のUILocalNotification
- 17. 次の子供以外の要素を取得する方法
- 18. プライマリ以外の購入アカウントのメールアドレスを取得する方法
- 19. タイムゾーン間の時間を変換する方法(UTCからEDT)?
- 20. タイムゾーンをローカルタイムゾーンに変換する
- 21. Python Thriftサーバーでクライアント情報を取得する方法は?
- 22. タイムゾーン情報を取得する方法
- 23. admin以外のすべてのユーザー名を取得します
- 24. MySQLサーバーのタイムゾーンを取得してからPHPで変換を行う方法
- 25. cassandraのプライマリキー以外のユニークキーの取得方法は?
- 26. タイムゾーンから国の詳細を取得する方法は?
- 27. PythonでUTC時間を取得するには?
- 28. メソッド内のユーザー入力を取得する方法(Python)
- 29. UTCの日付を自分のタイムゾーンに変換する方法は?
- 30. SYSDATEのOracle上でのUTC値の取得方法
これはプレーンなPythonでタイムゾーン変換を行う方法の例ですが、OpenERPはこれを行う方法とそれが意味をなされたときのガイドラインをお勧めしています(私の答えを参照) – odony