使用python获取本地时区的几种方法

第一种方法

说到使用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交互运行的。。。

第二种方法

后来我去看了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

这个方法简单的另人咂舌。。。。

为什么用%Z (注意是大写的Z)可以打印出来时区呢,因为,在strftime函数中有定义:

strftime(...)
  strftime(format[, tuple]) -> string
  将指定的struct_time(默认为当前时间),根据指定的格式化字符串输出
  python中时间日期格式化符号:
  %y 两位数的年份表示(00-99)
  %Y 四位数的年份表示(000-9999)
  %m 月份(01-12)
  %d 月内中的一天(0-31)
  %H 24小时制小时数(0-23)
  %I 12小时制小时数(01-12)
  %M 分钟数(00=59)
  %S 秒(00-59)
 
  %a 本地简化星期名称
  %A 本地完整星期名称
  %b 本地简化的月份名称
  %B 本地完整的月份名称
  %c 本地相应的日期表示和时间表示
  %j 年内的一天(001-366)
  %p 本地A.M.或P.M.的等价符
  %U 一年中的星期数(00-53)星期天为星期的开始
  %w 星期(0-6),星期天为星期的开始
  %W 一年中的星期数(00-53)星期一为星期的开始
  %x 本地相应的日期表示
  %X 本地相应的时间表示
  %Z 当前时区的名称
  %% %号本身

所以这下很明了了。。。用这种方法,可以算出这是这一年的第几天,第几周,etc...

发布了2 篇原创文章 · 获赞 3 · 访问量 1万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 技术黑板 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览