Èç¹ûÄãµÄ³ÌÐòÒª¿¼ÂÇÊ±Çø£¬¿ÉÒÔʹÓÃpytz¡£datetimeÄ£¿éÖÐÓÐtzinfoÏà¹ØµÄ¶«Î÷£¬µ«ÊÇËüÊÇÒ»¸ö³éÏóÀ࣬ÎĵµÉÏ˵£º
tzinfo is an abstract base clase, meaning that this class should not be instantiated directly. You need to derive a concrete subclass, and (at least) supply implementations of the standard
tzinfo methods needed by the
datetime methods you use. The
datetime module does not supply any concrete subclasses of
tzinfo.
ÉÏÃæÊÇ˵tzinfoÊÇÒ»¸ö³éÏóÀ࣬²»Ó¦¸Ã±»Ö±½ÓʵÀý»¯¡£ÄãÐèÒªÅÉÉú×ÓÀ࣬ÌṩÏàÓ¦µÄ±ê×¼·½·¨¡£datetimeÄ£¿é²¢²»ÌṩtzinfoµÄÈκÎ×ÓÀà¡£
ËùÒÔÄã¿ÉÄÜ»áʹÓÃpytzÕâ¸öÄ£¿é¡£Í¨¹ýeasy_install¿ÉÒÔ°²×°¡£Ä¿Ç°ËüµÄ×îÐÂÎĵµÔÚ
ÕâÀï¡£
¹ØÓÚÊ±ÇøÊ¹ÓõãÏë·¨£º
1. Èç¹ûÄãµÄÍøÕ¾¿ÉÄÜÓÐÀ´×ÔÆäËüÊ±ÇøµÄ£¬¿ÉÄÜÄãÒª¿¼ÂÇÕâ¸öÎÊÌâ¡£¶¼ÊÇÒ»¸öµØÇøµÄ»°£¬»¹Òª¿´·þÎñÆ÷ÊÇ·ñÓëÓû§ÔÚÒ»¸öµØÇø£¬Èç¹û²»ÔÚ£¬Ò²Òª¿¼ÂÇ¡£
2. Òò´Ë£¬»ù±¾ÉÏÒª¿¼ÂÇ·þÎñÆ÷Ê±ÇøÓëÓû§Ê±Çø¡£·þÎñÆ÷Ê±Çø¿ÉÒÔÅäÖÃÔÚϵͳÖУ¬È«¾ÖÉúЧ¡£¶øÓû§Ê±ÇøÔòÓëÓû§Ïà¹Ø£¬¿ÉÒÔÓÉÓû§×ÔÒѽøÐÐÉèÖá£
3. ÔÚÉú³ÉÏà¹ØÊ±¼ä¶ÔÏóʱҪ¼ÓÈëÊ±ÇøµÄÐÅÏ¢£¬²¢ÔÚÊä³öʱ½øÐкÏÊʵÄת»»¡£
¶øpytzÌṩÁË´´½¨Ä³¸öÊ±Çø¶ÔÏóµÄ·½·¨£¬È磬ÖйúÊ±Çø£º
>>> import pytz
>>> pytz.country_timezones('cn')
['Asia/Shanghai', 'Asia/Harbin', 'Asia/Chongqing', 'Asia/Urumqi', 'Asia/Kashgar']
¿ÉÒÔ¿´µ½£¬ÖйúµÄÊ±Çø¿ÉÄÜÓУº'Asia/Shanghai', 'Asia/Harbin', 'Asia/Chongqing'£¬×îºóÁ½¸ö²»ÖªµÀÊÇʲô¡£ÎÒÃÇ¿ÉÄÜʹÓõÄ'Asia/Shanghai'±È½Ï¶à¡£
Òò´Ë¿ÉÒÔ´´½¨Ò»¸öÊ±Çø¶ÔÏó£º
>>> tz = pytz.timezone('Asia/Shanghai')
È»ºóÔÚ´´½¨Ê±¼ä¶ÔÏóʱ½øÐÐÖ¸¶¨£º
>>> import datetime
>>> datetime.datetime.now(tz)
datetime.datetime(2009, 2, 21, 15, 12, 33, 906000, tzinfo=<DstTzInfo 'Asia/Shanghai' CST+8:00:00 STD>)
>>> datetime.datetime(2009, 2, 21, 15, 12, 33, tzinfo=tz)
datetime.datetime(2009, 2, 21, 15, 12, 33, tzinfo=<DstTzInfo 'Asia/Shanghai' LMT+8:06:00 STD>)
>>> datetime.date(2009, 2, 21, tzinfo=tz)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'tzinfo' is an invalid keyword argument for this function
>>> datetime.time(15, 12, 33, tzinfo=tz)
datetime.time(15, 12, 33, tzinfo=<DstTzInfo 'Asia/Shanghai' LMT+8:06:00 STD>)
´ÓÉÏÃæ¿ÉÒÔ¿´³önow(), datetime(), time()¶¼ÊÇ¿ÉÒÔÖ¸¶¨tzinfoÐÅÏ¢µÄ£¬¶ødateÊDz»Ðе쬲»ÖªµÀΪʲô¡£ËùÒÔ×îºÃµÄ·½·¨ÊÇÄÚ²¿Ê¹ÓÃdatetime¶ÔÏó£¬ÐèҪʱ½øÐÐÊ±Çø×ª»»£¬È»ºóÔÙÊä³ö¡£
Ê±Çø×ª»»£º
>>> utc = pytz.utc
>>> n = datetime.datetime.now(tz)
>>> n
datetime.datetime(2009, 2, 21, 15, 16, 41, 843000, tzinfo=<DstTzInfo 'Asia/Shanghai' CST+8:00:00 STD>)
>>> new = n.astimezone(utc)
>>> new
datetime.datetime(2009, 2, 21, 7, 16, 41, 843000, tzinfo=<UTC>)
>>> utc.normalize(n.astimezone(utc))
datetime.datetime(2009, 2, 21, 7, 16, 41, 843000, tzinfo=<UTC>)
utcÊÇÊÀ½ç±ê׼ʱ¼ä¡£
ÉÏÃæµÄ´úÂëͨ¹ýastimezone(utc)½«Öйúʱ¼äתΪutc±ê׼ʱ¼ä£¬¿ÉÒÔ¿´µ½²»Í¬µÄÊ±ÇøÊ±¼äÒѾ²»Ò»ÑùÁË¡£²»¹ýÔÚpytzµÄÎĵµÉÏ˵£º
Converting between timezones also needs special attention. This also needs to use the normalize method to ensure the conversion is correct.
ҪעÒâÊ²Ã´ÄØ£¿ÊÇ daylight savings time£¬ÖÐÎĽÐ
ÈÕ¹â½ÚԼʱ¼ä»òÏÄÁîʱ¡£¶ÔÓÚÓвÉÓÃÁËÏÄÊ±ÖÆµÄҪʹÓÃnormzlizeÀ´´¦Àí£¬²»²ÉÓõģ¬Ö±½ÓʹÓÃastimezoneÀ´´¦Àí¡£ËùÒÔÔÚͨ³£Çé¿öÏÂʹÓÃastimezone()¾Í×ã¹»ÁË¡£
ÁíÍâpytz»¹ÌṩÁËÈ«²¿µÄtimezoneÐÅÏ¢£¬È磺
>>> from pytz import all_timezones
>>> len(all_timezones)
559
>>> from pytz import common_timezones
>>> len(common_timezones)
393
¿ÉÒÔ¿´µ½Óкܶࡣ