Django应用程序中的DST时区问题 [英] DST timezone issue in django app

查看:165
本文介绍了Django应用程序中的DST时区问题的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述



我需要将一个事件对象(DB中的行/条目)的副本复制到另一个事件对象中。它创建另一个具有相同细节的对象。



此事件对象涉及时区和日光节约。



面临DST期间的问题。在复制对象期间,我已经应用了5天的时间增量。






在正常日子



事件对象1
日期:2014年11月10日上午10:36



事件对象2(副本1)
日期:2014年11月15日上午10:36



这样OK ..!






但在DST天我不想要这个1小时更改。



事件对象1
日期:2015年10月30日上午10:36



事件对象2(副本1)
日期:2015年11月4日上午9:36






在DST更改期间,1小时内自动减少对象2(10月30日属于DST,11月4日不是)。但我想要同一时间。如何解决这个问题?

解决方案

Timedeltas代数通过添加/减少时间而不是日期,这就是为什么你得到一个通过DST更改时,小时少。



我认为最简单的解决方案是使用本地化时间执行代数,而不是归一化。这样你就会做错了,但你会得到你想要的。



示例:

  timestamp_1 = event.timestamp#我们假设这个datetime是UTC 
madrid = pytz.timezone('Europe / Madrid')
madrid.localize(timestamp_1)
timestamp_2 = timestamp_1 + datetime.timedelta(days = 5)
new_event =事件(timestamp = timestamp_2)

请参阅 http://pytz.sourceforge.net/#本地化时间和日期算术


I am making an events app in django.

In that I need to make a copy of one event object (row/entry in DB) into another. It creates another object with same details.

This event object involves timezone and Day light Saving.

I am facing problems during DST. I have applied time delta of 5 days during copying of objects.


In normal days

Event object 1 date: Nov. 10, 2014 10:36 a.m.

Event object 2(copy of 1) date: Nov. 15, 2014 10:36 a.m.

This OK..!


But in DST days I don't want this 1 hr change.

Event object 1 date: Oct. 30, 2015, 10:36 a.m.

Event object 2(copy of 1) date: Nov. 4, 2015, 9:36 a.m.


Here 1 hour is automatically reducing in object 2 during DST change(Oct 30 is belongs to DST, Nov 4 is not). But I want same time. How can I fix this???

解决方案

Timedeltas algebra work by adding/substracting time, not dates, that's why you get one hour less when passing through a DST change.

I think the easiest solution is to perform the algebra using localized times and not normalizing. This way you will be "doing it wrong" but you'll get what you want.

Example:

timestamp_1 = event.timestamp   # we assume this datetime comes in UTC
madrid = pytz.timezone('Europe/Madrid')
madrid.localize(timestamp_1)
timestamp_2 = timestamp_1 + datetime.timedelta(days=5)
new_event = Event(timestamp=timestamp_2)

See http://pytz.sourceforge.net/#localized-times-and-date-arithmetic

这篇关于Django应用程序中的DST时区问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆