Python时区设置与获取本地时区方法

Python时区的处理

发现python没有简单的处理时区的方法,不明白为什么Python不提供一个时区模块来处理时区问题。 好在我们有个第三方pytz模块,能够帮我们解决一下时区问题。

pytz简单教程

pytz查询某个的时区

可以根据国家代码查找这个国家的所有时区。

>>> import pytz
>>> pytz.country_timezones('cn')
['Asia/Shanghai', 'Asia/Harbin', 'Asia/Chongqing', 'Asia/Urumqi', 'Asia/Kashgar']

pytz创建时区对象

根据上面得到的时区信息,就可以创建指定的时区对象。比如创建上海时区对象:

tz = pytz.timezone('Asia/Shanghai')

得到某个时区的时间

然后在创建时间对象时进行指定上面时区,就可以得到指定时区的日期时间:

>>> import datetime
>>> datetime.datetime.now(tz)

二、获取本地时区的N种方法

第一种方法:
说到使用python来操作timezone,首先想到的肯定是win32timezone了。。。
我试着用win32timezone获取了一下,结果如下:
 
>>> from win32timezone import *
>>> now() datetime.datetime(2011, 4, 29, 17, 9, 24, 623000, tzinfo=TimeZoneInfo(u'China Standard Time', True))
>>> print now() 2011-04-29 17:09:27.154000+08:00
>>> print type(now()) <type 'datetime.datetime'>
>>> now().tzinfo TimeZoneInfo(u'China Standard Time', True)
>>> print now().tzinfo Unknown
>>> print type(now().tzinfo) <class 'win32timezone.TimeZoneInfo'>
 
打印的结果,可以看到: 使用函数,是可以得到结果,但是如果使用print之后,跟只使用函数是不同的,甚至打印win32timezone.now().tzinfo的结果却是Unknow。我看到各种函数的类型之后,发现,他们本身是个class型(我猜的),不是str型,所以打印出来的结果是不同的
所以使用win32timezone的方法看来行不通,因为程序写的长一点,是不可能用IDLE交互运行的。。。
 
注:如果在编写程序时提示"No module named 'win32timezone'" 则是没有导入模块

解决方法:from win32timezone import *
 
第二种方法:
后来我去看了timezone的函数原型,地址:%Python_Home%/Lib/site-packages/win32/lib/win32timezone.py
发现有一个函数是这么写的:
def _get_time_zone_key(subkey=None):
"Return the registry key that stores time zone details"
key = _RegKeyDict.open(_winreg.HKEY_LOCAL_MACHINE, TimeZoneInfo.tzRegKey)
if subkey:
key = key.subkey(subkey)
return key
 
所以,我发现,在python中获取time zone key的方法是从注册表中获取,因为用了'_winreg',所以,既然调用win32timezone无效,那么我也直接从注册表中获取。
TimeZone 的 位置为: [HKEY_CURRENT_USER/Software/Microsoft/Windows NT/CurrentVersion/Time Zones]
KeyName为: TimeZoneKeyName
所以我可以这么获取:
 
import _winreg key = _winreg.OpenKey(_winreg.HKEY_CURRENT_USER, r'Software/Microsoft/Windows NT/CurrentVersion/Time Zones')
value, type = _winreg.QueryValueEx(key, 'TimeZoneKeyName')
print value
#----Result:----#
>>> China Standard Time
 
 
所以用这种方法成功了。。。
 
废话一句,其实用注册表获得键值的方法很强大,一切跟win32相关的信息,都可以从注册表中获得,例如用户名之类的。。。
 
第三种方法:
今天无意闲看,发现了一个很简单的方法,例子:
 
>>> import time
>>> str = time.strftime('%Z', time.localtime())
>>> print str
China Standard Time

时间: 2024-09-25 14:44:02

Python时区设置与获取本地时区方法的相关文章

javascript设置和获取cookie的方法实例详解_javascript技巧

本文实例讲述了javascript设置和获取cookie的方法.分享给大家供大家参考,具体如下: 1. 设置cookie function setCookie(cookieName,cookieValue,cookieExpires,cookiePath) { cookieValue = escape(cookieValue);//编码latin-1 if(cookieExpires=="") { var nowDate = new Date(); nowDate.setMonth(n

Python从MP3文件获取id3的方法

       本文实例讲述了Python从MP3文件获取id3的方法.分享给大家供大家参考.具体如下: ? 1 2 3 4 5 6 7 8 9 10 11 def getID3(filename): fp = open(filename, 'r') fp.seek(-128, 2) fp.read(3) # TAG iniziale title = fp.read(30) artist = fp.read(30) album = fp.read(30) anno = fp.read(4) com

Python可跨平台实现获取按键的方法_python

本文实例讲述了Python可跨平台实现获取按键的方法.分享给大家供大家参考.具体如下: 复制代码 代码如下: class _Getch:      """Gets a single character from standard input.  Does not echo to the screen."""     def __init__(self):          try:              self.impl = _GetchW

解析Linux下的时间函数:设置以及获取时间的方法_C 语言

一.时间函数 复制代码 代码如下: time_t time(time_t *t);char *asctime(const struct tm *tm);char *asctime_r(const struct tm *tm, char *buf);char *ctime(const time_t *timep);char *ctime_r(const time_t *timep, char *buf);struct tm *gmtime(const time_t *timep); //获取的为英

Python中设置变量访问权限的方法_python

在Class内部,可以有属性和方法,而外部代码可以通过直接调用实例变量的方法来操作数据,这样,就隐藏了内部的复杂逻辑. 但是,从前面Student类的定义来看,外部代码还是可以自由地修改一个实例的name.score属性: >>> bart = Student('Bart Simpson', 98) >>> bart.score 98 >>> bart.score = 59 >>> bart.score 59 如果要让内部属性不被外部

php系统时区设置方法总结

时区划分 整个地球分为24个时区,每个时序都有自己的本地时间.同一时间,每个时区的本地时间相差1到23个小时,例如,英国伦敦本地时间与北京本地时间相差8个小时.在国际无线电通信领域,使用一个统一的时间,称为通用协调时间(UTC,Universal Time Coordinated),UTC与格林威治标准时间(GMT,Greenwich Mean Time)相同,都与英国伦敦的本地时间相同 时区设置 由于PHP5.0对data()函数进行了重写,因此,目前的日期时间函数比系统时间少8个小时.在PH

android-获取网络时间、获取特定时区时间、时间同步的方法_Android

最近整理出android-获取网络时间.获取特定时区时间.时间同步的方法.具体如下: 方法一: SimpleDateFormat dff = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); dff.setTimeZone(TimeZone.getTimeZone("GMT+08")); String ee = dff.format(new Date()); 这个方法获取的结果是24小时制的,月份也正确.  这个方法不随手机时

JS设置获取cookies的方法

 这篇文章主要介绍了JS设置获取cookies的方法,有需要的朋友可以参考一下 结合JavaScript权威指南,加上项目开发时在网上搜集的资料,整理了两种设置和获取cookie的方法.  代码如下: <script>   //设置cookie  方法一 function setCookie(name,value){  var exp = new Date();  exp.setTime(exp.getTime() + 1*60*60*1000);//有效期1小时  document.cook

JS设置获取cookies的方法_javascript技巧

结合JavaScript权威指南,加上项目开发时在网上搜集的资料,整理了两种设置和获取cookie的方法. 复制代码 代码如下: <script> //设置cookie  方法一function setCookie(name,value){ var exp = new Date(); exp.setTime(exp.getTime() + 1*60*60*1000);//有效期1小时 document.cookie = name + "="+ escape (value)