我想在数据存储区出来后立即自动设置每个datetime
实例的.tzinfo。
所以,如果我有
class Message( db.Model ):
creationTime = db.DateTimeProperty()
someOtherTime = db.DateTimeProperty()
## I really want to define a method like this,
## that runs immediately AFTER an instance has
## been refreshed from the datastore
def wakeup( self ):
self.creationTime.tzinfo = self.creationTime.replace( tzinfo=EST )
self.someOtherTime.tzinfo = self.creationTime.replace( tzinfo=EST )
是否可以在GAE中执行此操作?
答案 0 :(得分:2)
我认为最好的方法是让你继承 DateTimeProperty类并覆盖其方法make_value_from_datastore:
class EstDateTimeProperty(db.DateTimeProperty):
def make_value_from_datastore(self, value):
naive_utc = db.DateTimeProperty(self, value)
aware_utc = naive_utc.replace(tzinfo=UTC)
return aware_utc.astimezone(EST)
给出合适的tzinfo对象UTC和EST当然(由pytz或其他)构建。当然,您还可以构建一个更通用的“智能日期时间”属性类,并让它从__init__
中的关键字参数设置感兴趣的时区,例如,如果您需要多个不同的日期时间属性来使用不同的时区。
答案 1 :(得分:1)
恕我直言,这不是处理GAE时区的最佳方式。来自docs:
如果datetime值具有tzinfo属性,则它将转换为UTC时区进行存储。值从数据存储区返回UTC,tzinfo为None。需要日期和时间值在特定时区的应用程序必须在更新值时正确设置tzinfo,并在访问值时将值转换为时区。
所以,
auto_now
and auto_now_add
arguments。pacific_time = utc_time.astimezone(Pacific_tzinfo())
date_from_user.replace(tzinfo=EST)