标签: pytz

如何确定DST何时在Python中的特定位置开始或结束?

我正在寻找一种方法来确定DST在我正在处理的Python脚本中何时开始或结束给定时区.

我知道pytz可以将我正在工作的UTC日期转换为本地时间,并且会考虑DST,但是对于这个特定的应用程序,我需要知道转换的重点.

有什么建议?

python timezone pytz dst

13
推荐指数
1
解决办法
5560
查看次数

Django教程 - 不正确配置的异常(未安装pytz)

我目前正在使用OSX上版本1.6.1和Python 2.7.5版本的官方Django教程.我正在开发第2部分,即管理界面.当我尝试进入/ admin/polls/poll /时,我收到以下错误报告:

ImproperlyConfigured at /admin/polls/poll/
This query requires pytz, but it isn't installed.
Request Method: GET
Request URL:    http://127.0.0.1:8000/admin/polls/poll/
Django Version: 1.6.1
Exception Type: ImproperlyConfigured
Exception Value:    
This query requires pytz, but it isn't installed.
Exception Location: /opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/django/db/backends/sqlite3/base.py in datetime_trunc_sql, line 196
Python Executable:  /opt/local/Library/Frameworks/Python.framework/Versions/2.7/Resources/Python.app/Contents/MacOS/Python
Python Version: 2.7.5
Run Code Online (Sandbox Code Playgroud)

我尝试通过安装pip(需要安装setuptools)安装pytz,但这没有任何区别.此外,我将再次阅读本教程,我知道一个月前我没有遇到过这个问题.可能更新到小牛队造成了一些问题吗?

python django pytz

12
推荐指数
2
解决办法
8033
查看次数

在python中获取给定时区的DST边界

是否有可能使用pytz获得给定时区的DST边界?

python pytz

11
推荐指数
1
解决办法
2436
查看次数

pytz.timezone显示亚洲/加尔各答奇怪的结果?

可能重复:
Python datetime对象显示错误的时区偏移量

import pytz, datetime

 pytz.timezone("Asia/Calcutta")
Run Code Online (Sandbox Code Playgroud)

打印以下内容:

< DstTzInfo 'Asia/Calcutta' HMT+5:53:00 STD >
Run Code Online (Sandbox Code Playgroud)

为什么不是05:30呢?我在时区America/Los_Angeles.

python datetime pytz

11
推荐指数
1
解决办法
4804
查看次数

Python中的夏令时

我正在编写一个程序,它可以处理很多时区并将它们交叉.我最常处理的两件事是从"now"创建一个datetime对象,然后本地化一个天真的datetime对象.

要在太平洋时区创建一个日期时间对象,我目前正在这样做(python 2.7.2+)

from datetime import datetime
import pytz
la = pytz.timezone("America/Los_Angeles")
now = datetime.now(la)
Run Code Online (Sandbox Code Playgroud)

对于夏令时,这是正确的吗?如果没有,我想我应该这样做:

now2 = la.localize(datetime.now())
Run Code Online (Sandbox Code Playgroud)

我的问题是为什么?任何人都可以告诉我第一个错误的情况,秒是对的?

至于我的秒问题,假设我在加利福尼亚州洛杉矶上午8:00的某个用户输入中有一个天真的日期和时间.是这样制作日期时间的正确方法:

la.localize(datetime(2012, 9, 1, 8, 0))
Run Code Online (Sandbox Code Playgroud)

如果没有,我应该如何构建这些日期时间?

python datetime pytz dst

11
推荐指数
3
解决办法
3万
查看次数

Python pytz:将本地时间转换为utc.Localize似乎没有转换

我有一个数据库,存储日期时间为UTC.我需要查询特定时间的信息,但日期和时间是在当地时间给出的,比如说'欧洲/哥本哈根'.我给这些作为:

year = 2012; month = 12; day = 2; hour = 13; min = 1;
Run Code Online (Sandbox Code Playgroud)

所以,我需要将这些转换为UTC,以便我可以在数据库中查找它们.我想用这个来做pytz.我在看localize:

 local_tz = timezone('Europe/Copenhagen')
 t = local_tz.localize(datetime.datetime(year, month, day, hour, min))
Run Code Online (Sandbox Code Playgroud)

但我很困惑localize().这是假设那一年等在当地时间给我的吗?或者,它是否假设它们是以UTC格式给出的,现在它已将它们转换为当地时间?

print t 给我:

2012-12-02 13:01:00+01:00
Run Code Online (Sandbox Code Playgroud)

所以它似乎假设原始年份等在utc; 小时现在是13 + 1而不是13.所以我该怎么做呢?我已经阅读了pytz文档,但这并没有让我更清楚.它提到了很多东西是棘手的,所以我不确定pytz是否真的解决了这些问题.而且,我并不总是知道这些例子是否向我展示了有效的东西或不起作用的东西.

我试过规范化:

print local_tz.normalize(t)
Run Code Online (Sandbox Code Playgroud)

这给了我与print t相同的结果.

编辑:使用上面给出的年份等数字,它应该与2012-12-2 12:01数据库中的信息相匹配.(因为那天哥本哈根是utc + 1)

python timezone pytz

11
推荐指数
1
解决办法
2万
查看次数

为什么pytz localize()不会生成一个日期时间对象,其tzinfo与本地化的tz对象匹配?

有谁能帮我理解这里发生了什么?

import pytz
from datetime import datetime
tz = pytz.timezone('Europe/Berlin')
print repr(tz)
# <DstTzInfo 'Europe/Berlin' LMT+0:53:00 STD>
dt = datetime(2011, 1, 3, 18, 40)
result = tz.localize(dt)
print repr(result.tzinfo)
# <DstTzInfo 'Europe/Berlin' CET+1:00:00 STD>
assert result.tzinfo == tz, "Why aren't these the same timezone?"
Run Code Online (Sandbox Code Playgroud)

我的理解是localize()pytz时区对象上的方法将采用一个天真的日期时间对象,并添加一个tzinfo匹配执行本地化的时区对象的属性.在这种情况下似乎没有发生这种情况.

显然,我对时区或者pytz处理时区的方式有些误解.谁能解释一下?

python timezone datetime pytz tzinfo

11
推荐指数
1
解决办法
2477
查看次数

使用pytz的Datetime时区转换

这只是另一篇文章pytz.

有两个函数可以在两个时区之间转换日期时间对象.第二个功能适用于所有情况.第一个函数在两种情况下失败,(3)和(4).类似的SO帖子没有这样的问题.任何解释基础上的区别localize(datetime.datetime)replace(tzinfo)将是一个很大的帮助.

>>> from dateutil.parser import parse
>>> import pytz
Run Code Online (Sandbox Code Playgroud)

第一个功能(越野车)

以下功能使用datetime.datetime.replace(tzinfo).

def buggy_timezone_converter(input_dt, current_tz='UTC', target_tz='US/Eastern'):
    '''input_dt is a datetime.datetime object'''
    current_tz = pytz.timezone(current_tz)
    target_tz = pytz.timezone(target_tz)
    target_dt = input_dt.replace(tzinfo=current_tz).astimezone(target_tz)
    return target_tz.normalize(target_dt)
Run Code Online (Sandbox Code Playgroud)

现在注意四个日期时间转换.

(1)从UTC到EST - 好的

>>> buggy_timezone_converter(parse('2013-02-26T04:00:00'))
Out[608]: datetime.datetime(2013, 2, 25, 23, 0, tzinfo=<DstTzInfo 'US/Eastern' EST-1 day, 19:00:00 STD>)
Run Code Online (Sandbox Code Playgroud)

(2)从UTC到EDT - 好的

>>> buggy_timezone_converter(parse('2013-05-26T04:00:00'))
Out[609]: datetime.datetime(2013, 5, 26, 0, 0, tzinfo=<DstTzInfo 'US/Eastern' EDT-1 day, 20:00:00 DST>)
Run Code Online (Sandbox Code Playgroud)

(3)从EST到UTC - 不行.时间偏移是4小时56分钟.它应该是5个小时 …

python timezone datetime pytz python-2.7

11
推荐指数
1
解决办法
4390
查看次数

`datetime.now(pytz_timezone)`什么时候失败?

delorean文档显示这种方式来获得在给定的时区当前时间 使用datetime:

from datetime import datetime
from pytz import timezone

EST = "US/Eastern"
UTC = "UTC"

d = datetime.utcnow()
utc = timezone(UTC)
est = timezone(EST)
d = utc.localize(d)
d = est.normalize(EST)
Run Code Online (Sandbox Code Playgroud)

并将其与基于delorian的代码进行比较:

from delorean import Delorean

EST = "US/Eastern"

d = Delorean(timezone=EST)
Run Code Online (Sandbox Code Playgroud)

我相信这个datetime例子应该写成:

from datetime import datetime
import pytz

eastern_timezone = pytz.timezone("US/Eastern")
d = datetime.now(eastern_timezone)
Run Code Online (Sandbox Code Playgroud)

这更简洁.

当最后一个代码示例失败而第一个代码示例继续工作时,是否有任何情况?


更新: 当前示例:

from datetime import datetime
import pytz

d = datetime.utcnow()
d = pytz.utc.localize(d)

est …
Run Code Online (Sandbox Code Playgroud)

python timezone datetime pytz delorian

11
推荐指数
1
解决办法
1827
查看次数

Python字符串到Django时区(知道日期时间)

TL; DR;

如何转换2016-01-01为django timezone??

完整版本

我从表单中收到一个查询字符串参数,我想得到该字符串并将其用作Django中的日期时间过滤器.问题是,当我将字符串转换为日期时间时,它不会识别日期时间,因此由于时区不同而丢失了几个小时.也许我在格式化中迷失自己,但我无法做到.

我有pytz,我也有USE_TZ = True我的设置.

例:

from datetime import date
# Example from what I receive as GET querystring parameter
start_date, end_date = '15-01-2016', '16-01-2016'
DATE_FORMAT = '%Y-%m-%d'
start_date = start_date.split('-')
start_date = date(int(start_date[2]), int(start_date[1]), int(start_date[0]))
sd_filter = start_date.strftime(DATE_FORMAT)

end_date = end_date.split('-')
end_date = date(int(end_date[2]), int(end_date[1]), int(end_date[0]))
ed_filter = end_date.strftime(DATE_FORMAT)

#query
my_list = MyModel.objects.filter(created_at__range=(sd_filter, ed_filter))
Run Code Online (Sandbox Code Playgroud)

问题在于过滤器..由于djanto设置的时区,我失去了几个小时.

UPDATE1:我不需要将a转换datetime.now()为我的时间..我需要将字符串转换为datetime ..

有人帮忙吗?

提前致谢

python django timezone datetime pytz

11
推荐指数
2
解决办法
8618
查看次数

标签 统计

python ×10

pytz ×10

datetime ×6

timezone ×6

django ×2

dst ×2

delorian ×1

python-2.7 ×1

tzinfo ×1