setings.py:-
USE_TZ = True
TIME_ZONE = 'America/Chicago'
class MyModel(models.Model):
created_at = models.DateTimeField(auto_now_add=True)
# time zone related field
user_time_zone = models.CharField(max_length=255, null=True, blank=True)
time_difference = models.CharField(max_length=255, null=True, blank=True)
client_date = models.DateTimeField(null=True, blank=True)
display_date = models.DateTimeField(null=True, blank=True)
MyModel object create
MyModel.objects.create(user_time_zone=form.cleaned_data['prefer_time_zone'])
Signal called after the MyModel is created
def update_time_zone(sender, instance, created, **kwargs):
if created:
fmt = "%Y-%m-%d %H:%M:%S %Z%z"
now_utc = instance.created_at
if instance.user_time_zone:
if instance.user_time_zone == 'US/Alaska':
alaska = now_utc.astimezone(timezone('US/Alaska'))
print "alaska is_aware", is_aware(alaska)
print "alaska is_naive", is_naive(alaska)
instance.client_date = alaska
instance.display_date = alaska
instance.time_difference = alaska.strftime(fmt).split(" ")[2]
instance.save()
print "alaska now utc", type(now_utc)
print "alaska type", type(alaska)
print "alaska", alaska
# At here i got updated value but when i see inside
# postgres database value is not updated
print "instance.client_date", instance.client_date
print "us/alaska", alaska.strftime(fmt)
signals.post_save.connect(update_time_zone, sender=MyModel)
instance.created_at = 2016-02-06 21:42:22.552000+00:00
alaska = 2016-02-06 12:42:22.552000-09:00
版本沒有更新: -Django的日期時間字段使用時區
instance.created_at轉換爲 '之後US /阿拉斯加' 輸出是2016年2月6日12:42:22.552000-09:00。但是,當我使client_date和display_date等於上述信號中的阿拉斯加時,它不會保存我最近更新的阿拉斯加值,而是通過添加5個小時來更新client_date和display_date by instance.created_at的值。我需要更新阿拉斯加時區的client_date和display_date。
當我調用instance.save()時,它在postgres數據庫中沒有任何作用。這有什麼問題?爲什麼它不更新阿拉斯加價值?有沒有像Django強制不更新新值,而是使用默認時區更新值?
檢查了這些? http://stackoverflow.com/questions/19505640/django-saving-datetime-based-on-per-object-timezone和http://www.saltycrane.com/blog/2009/05/converting-time-zones- datetime-objects-python/ –
是的,我正在關注saltycrane博客。但是client_date和display_date沒有更新我的阿拉斯加時區。即使我已經轉換了,它在數據庫內沒有任何影響。 –