我在 Django 和 Google App Engine 上使用 python。我还在我的一个模型中使用 DateTimeProperty。有时我想向用户显示该日期和时间。
将存储在 DateTimeProperty 中的日期时间转换为用户的日期时间的最佳方法是什么?
或者更精确地提出问题:获取客户时区并将 python 日期时间对象转换为他们自己的本地时间的最佳方法是什么?
最佳答案
这更像是一个 Python 问题,而不是 GAE 问题,除非 GAE 有一些基础设施来促进这一点(我已经快速扫描但没有找到任何引用)。
基本上,您想将日期/时间存储在 UTC 时区(例如使用 datetime.datetime.utcnow)以及用户时区,您可以尝试从用户 IP 中提取(使用 GeoDjango,如果在 GAE 上可用,或 pygeoip ; 您需要一些地理定位数据库,例如:http://www.maxmind.com/app/geolitecity ),或明确询问用户 - 其优点是您可以要求提供描述性时区名称,例如“Europe/Warsaw”。如果您只要求 UTC+2,那么您将丢失任何 DST 转换的指示。
然后,您可以使用例如pytz :
import pytz
local_tz = pytz.timezone(timezone_name)
return timestamp_utc.replace(tzinfo=pytz.utc).astimezone(local_tz).replace(tzinfo=None)
-- 其中 timestamp_utc
是要转换的 utc 日期时间,而 timezone_name 是提到的“Europe/Warsaw”。
(请注意,我不知道这些中的哪些在 GAE 中有效,但至少你会知道要寻找什么)
关于python - 将 UTC 日期时间转换为用户的本地日期和时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4115310/