我想知道Python库Pytz中timezone参数的所有可能值.
for tz in pytz.all_timezones:
print tz
Africa/Abidjan
Africa/Accra
Africa/Addis_Ababa
Africa/Algiers
Africa/Asmara
Africa/Asmera
Africa/Bamako
Africa/Bangui
Africa/Banjul
Africa/Bissau
Africa/Blantyre
Africa/Brazzaville
Africa/Bujumbura
Africa/Cairo
Africa/Casablanca
Africa/Ceuta
Africa/Conakry
Africa/Dakar
Africa/Dar_es_Salaam
Africa/Djibouti
Africa/Douala
Africa/El_Aaiun
Africa/Freetown
Africa/Gaborone
Africa/Harare
Africa/Johannesburg
Africa/Juba
Africa/Kampala
Africa/Khartoum
Africa/Kigali
Africa/Kinshasa
Africa/Lagos
Africa/Libreville
Africa/Lome
Africa/Luanda
Africa/Lubumbashi
Africa/Lusaka
Africa/Malabo
Africa/Maputo
Africa/Maseru
Africa/Mbabane
Africa/Mogadishu
Africa/Monrovia
Africa/Nairobi
Africa/Ndjamena
Africa/Niamey
Africa/Nouakchott
Africa/Ouagadougou
Africa/Porto-Novo
Africa/Sao_Tome
Africa/Timbuktu
Africa/Tripoli
Africa/Tunis
Africa/Windhoek
America/Adak
America/Anchorage
America/Anguilla
America/Antigua
America/Araguaina
America/Argentina/Buenos_Aires
America/Argentina/Catamarca
America/Argentina/ComodRivadavia
America/Argentina/Cordoba
America/Argentina/Jujuy
America/Argentina/La_Rioja
America/Argentina/Mendoza
America/Argentina/Rio_Gallegos
America/Argentina/Salta
America/Argentina/San_Juan
America/Argentina/San_Luis
America/Argentina/Tucuman
America/Argentina/Ushuaia …
Run Code Online (Sandbox Code Playgroud) 有没有一种简单的方法从pytz日期时间对象中删除时区?
例如dt
,dt_tz
在这个例子中重建:
>>> import datetime
>>> import pytz
>>> dt = datetime.datetime.now()
>>> dt
datetime.datetime(2012, 6, 8, 9, 27, 32, 601000)
>>> dt_tz = pytz.utc.localize(dt)
>>> dt_tz
datetime.datetime(2012, 6, 8, 9, 27, 32, 601000, tzinfo=<UTC>)
Run Code Online (Sandbox Code Playgroud) 我在virtualenv中安装pytz时遇到问题.
下载/解压缩pytz
无法找到满足要求pytz的版本(版本:2009r,2008b,2009f,2008c,2007g,2011g,2005m,2011e,2007f,2011k,2007k,2006j,2008h,2008i,2011e,2008a, 2009e,2006g,2011j,2010l,2005m,2008i,2005k,2008g,2007c,2007i,2009l,2009r,2006j,2011k,2007d,2006p,2009i,2009u,2007i,2009f,2010g,2008h,2009a,2007g,2011e, 2006p,2012b,2010k,2005r,2007f,2009l,2009p,2008c,2009j,2008g,2010g,2010h,2011h,2010k,2007c,2007d,2011d,2009l,2011c,2008a,2005m,2007k,2009n,2011d,2010o, 2013b,2012h,2010e,2012c,2012d,2012f,2011n,2011b,2011j,2008c,2012j,2007k,2009f,2009d,2010e,2010b,2013b,2011d,2009p,2008h,2005r,2009i,2009n,2009a,2010k, 2008g,2006g,2008b,2012c,2009i,2007g,2012c,2010h,2011n,2012g,2007d,2008a,2009u,2012g,2010o,2006p,2010b,2009u,2012d,2011k,2012f,2009a,2007f,2011h,2010l, 2009j,2011g,2009g,2009g,2005r,2011c,2012g,2009g,2012d,2009j,2010o,2007c,2010g,2006g,2009d,2010h,2005k,2006j,2010b,2009n,2011g,2011c,2012b,2009e,2009d,2011j,2007i,2012j,2010l,2009r,2012h,2010e,2009p,2008i,2012f,2009e,2012b, 2011h,2005k,2008b,2013b,2011n,2012j,2004b)
清理......
没有匹配pytz版本的发行版
这似乎是最新版本的pip的一个问题.
有没有解决方法?
我想存储具有本地化UTC时区的日期时间对象.存储datetime对象的方法可以被赋予非本地化的日期时间(天真)对象或已经本地化的对象.如何确定是否需要本地化?
如果条件丢失的代码:
class MyClass:
def set_date(self, d):
# what do i check here?
# if(d.tzinfo):
self.date = d.astimezone(pytz.utc)
# else:
self.date = pytz.utc.localize(d)
Run Code Online (Sandbox Code Playgroud) 我们可以使用time.tzname
获取本地时区名称,但该名称与之不兼容pytz.timezone
.
实际上,返回的名称time.tzname
含糊不清.此方法('CST', 'CST')
在我的系统中返回,但"CST"可以指示四个时区:
我有一个约会,我需要让时区知道.
local_tz = timezone('Asia/Tokyo')
start_date = '2012-09-27'
start_date = datetime.strptime(start_date, "%Y-%m-%d")
start_date = start_date.astimezone(local_tz)
now_utc = datetime.now(timezone('UTC'))
local_now = now_utc.astimezone(local_tz)
Run Code Online (Sandbox Code Playgroud)
我需要找到这是否属实:
print start_date>local_now
Run Code Online (Sandbox Code Playgroud)
但是我得到了这个错误.
start_date = start_date.astimezone(local_tz)
ValueError: astimezone() cannot be applied to a naive datetime
Run Code Online (Sandbox Code Playgroud)
我将utc转换为tokyo没有任何问题.我需要在东京做好start_date时区感知广告.
谢谢
我在pytz的.localize()函数中遇到了一些奇怪的问题.有时它不会调整本地化的日期时间:
.localize行为:
>>> tz
<DstTzInfo 'Africa/Abidjan' LMT-1 day, 23:44:00 STD>
>>> d
datetime.datetime(2009, 9, 2, 14, 45, 42, 91421)
>>> tz.localize(d)
datetime.datetime(2009, 9, 2, 14, 45, 42, 91421,
tzinfo=<DstTzInfo 'Africa/Abidjan' GMT0:00:00 STD>)
>>> tz.normalize(tz.localize(d))
datetime.datetime(2009, 9, 2, 14, 45, 42, 91421,
tzinfo=<DstTzInfo 'Africa/Abidjan' GMT0:00:00 STD>)
Run Code Online (Sandbox Code Playgroud)
如您所见,由于本地化/规范化操作,时间没有改变.但是,如果使用.replace:
>>> d.replace(tzinfo=tz)
datetime.datetime(2009, 9, 2, 14, 45, 42, 91421,
tzinfo=<DstTzInfo 'Africa/Abidjan' LMT-1 day, 23:44:00 STD>)
>>> tz.normalize(d.replace(tzinfo=tz))
datetime.datetime(2009, 9, 2, 15, 1, 42, 91421,
tzinfo=<DstTzInfo 'Africa/Abidjan' GMT0:00:00 STD>)
Run Code Online (Sandbox Code Playgroud)
这似乎调整了日期时间.
问题是 - 这是正确的,为什么其他的错?
我现在能想到的最好的就是这种怪异:
>>> datetime.utcnow() \
... .replace(tzinfo=pytz.UTC) \
... .astimezone(pytz.timezone("Australia/Melbourne")) \
... .replace(hour=0,minute=0,second=0,microsecond=0) \
... .astimezone(pytz.UTC) \
... .replace(tzinfo=None)
datetime.datetime(2008, 12, 16, 13, 0)
Run Code Online (Sandbox Code Playgroud)
即,用英语,获取当前时间(以UTC为单位),将其转换为其他时区,将时间设置为午夜,然后转换回UTC.
我不只是使用now()或localtime(),因为它会使用服务器的时区,而不是用户的时区.
我不禁感到我错过了什么,有什么想法吗?
>>> import pytz
>>> pytz.timezone('Asia/Hong_Kong')
<DstTzInfo 'Asia/Hong_Kong' LMT+7:37:00 STD>
Run Code Online (Sandbox Code Playgroud)
7小时37分钟的偏移量?这有点奇怪,有没有人遇到同样的问题?
事实上,我之间的行为有所不同
import pytz
from datetime import datetime
hk = pytz.timezone('Asia/Hong_Kong')
dt1 = datetime(2012,1,1,tzinfo=hk)
dt2 = hk.localize(datetime(2012,1,1))
if dt1 > dt2:
print "Why?"
Run Code Online (Sandbox Code Playgroud) 我试图理解为什么在将时区转换为UTC时我得到这些结果:
In [74]: d1 = datetime(2007, 12, 5, 6, 30,tzinfo=pytz.timezone('US/Pacific'))
In [75]: d1
Out[75]: datetime.datetime(2007, 12, 5, 6, 30, tzinfo=<DstTzInfo 'US/Pacific' LMT-1 day, **16:07:00 STD**>)
In [76]: d1.astimezone(pytz.utc)
Out[76]: datetime.datetime(2007, 12, 5, 14, 23, tzinfo=<UTC>)
Run Code Online (Sandbox Code Playgroud)
为什么早上6:30成为下午2:23?
另一方面,如果我使用以下方法,我得到预期的结果:
In [90]: d2 = datetime(2007, 12, 5, 6, 30)
In [91]: uspac = pytz.timezone('US/Pacific')
In [92]: d2_aware = uspac.localize(d2)
In [94]: d2_aware.astimezone(pytz.utc)
Out[94]: datetime.datetime(2007, 12, 5, 14, 30, tzinfo=<UTC>)
Run Code Online (Sandbox Code Playgroud)