您的位置:首页 > 编程语言 > Python开发

python标准库学习4-time

2016-03-18 23:24 681 查看
time模块可以实现:获取当前时间,操作时间,日期,从字符串读取时间以及格式化时间为字符串.

>>> dir(time)
['__doc__', '__name__', '__package__', 'accept2dyear', 'altzone', 'asctime', 'clock', 'ctime', 'daylight', 'gmtime', 'lo
caltime', 'mktime', 'sleep', 'strftime', 'strptime', 'struct_time', 'time', 'timezone', 'tzname']


time元组的包含9个整数,例如
(2008,1,21,12,2,56,0,21,0)
分别表示:
年,月,日,时,分,秒,周(0-6,0为周一),一年中的第几天(1-366),夏令时(0,1,-1,默认为-1)

time模块中重要的函数:

1.asctime(tuple):将时间元组转换成字符串

2.localtime([secs]):将秒数转换为日起元组,以本地时间为准

3.mktime(tuple):将时间元组转换为本地时间

4.sleep(secs):休眠sccs秒

5.strptime(string[,format]):将字符串解析为时间元组

6.time():当前时间

具体如下:

1.time.altzone:本地时区相对于UTC的偏移量,时间为秒

>>> time.altzone
-28800


2.time.asctime([tuple]):将一个元组时间转换为字符串,如果为空的话默认是将localtime转换为字符串

>>> time.asctime()
'Fri Mar 18 22:14:50 2016'
>>> time.localtime()
time.struct_time(tm_year=2016, tm_mon=3, tm_mday=18, tm_hour=22, tm_min=14, tm_sec=59, tm_wday=4, tm_yday=78, tm_isdst=0
)
>>> time.asctime(time.localtime())
'Fri Mar 18 22:15:07 2016'


3.time.clock():这个需要注意,在不同的系统上含义不同。在UNIX系统上,它返回的是“进程时间”,它是用秒表示的浮点数(时间戳)。而在WINDOWS中,第一次调用,返回的是进程运行的实际时间。而第二次之后的调用是自第一次调用以后到现在的运行时间。(实际上是以WIN32上QueryPerformanceCounter()为基础,它比毫秒表示更为精确)

>>> time.clock()
536.467391592595
>>> time.clock()
539.3552396209267


4.time.ctime(sec):转换一个sec为本地时间,如果sec为空或者None那么就把sec当作time(),这事ctime()就等于asctime(localtime()),所有的这些秒都是相对于1970年1月1日0点

>>> time.ctime(11111)
'Thu Jan 01 11:05:11 1970'
>>> time.ctime()
'Fri Mar 18 22:32:28 2016'
>>> time.ctime(time.time())
'Fri Mar 18 22:32:38 2016'


5.time.daylight:如果设置了DST(夏时令)则不为0

6.time.gmtime(sec):将一个指定的sec转换为一个不启用DST的标准时间的结构,如果sec为空或者None,sec等于time()

>>> time.gmtime(1111)
time.struct_time(tm_year=1970, tm_mon=1, tm_mday=1, tm_hour=0, tm_min=18, tm_sec=31, tm_wday=3, tm_yday=1, tm_isdst=0)
>>> time.gmtime()
time.struct_time(tm_year=2016, tm_mon=3, tm_mday=18, tm_hour=14, tm_min=36, tm_sec=45, tm_wday=4, tm_yday=78, tm_isdst=0
)


这里的struct_time就是开头提到的:

IndexAttributeValues
0
tm_year
(for example, 1993)
1
tm_mon
range [1, 12]
2
tm_mday
range [1, 31]
3
tm_hour
range [0, 23]
4
tm_min
range [0, 59]
5
tm_sec
range [0, 61]; see (2) in
strftime()
description
6
tm_wday
range [0, 6], Monday is 0
7
tm_yday
range [1, 366]
8
tm_isdst
0, 1 or -1; see below
7.time.localtime(sec):和gmtime类似但是转换为本地时间

>>> time.localtime()
time.struct_time(tm_year=2016, tm_mon=3, tm_mday=18, tm_hour=22, tm_min=40, tm_sec=19, tm_wday=4, tm_yday=78, tm_isdst=0
)
>>> time.localtime(0)
time.struct_time(tm_year=1970, tm_mon=1, tm_mday=1, tm_hour=8, tm_min=0, tm_sec=0, tm_wday=3, tm_yday=1, tm_isdst=0)


8.time.mktime(tuple):和localtime相反,将一个结构化的时间转换为时间戳

>>> time.mktime(time.localtime())
1458312198.0


9.time.sleep(sec):休眠sec秒

10.time.strftime(format[,t]):将一个标准时间tuple或者时间结构struct_time(可以通过gmtime或者localtime来获取)转换成一个格式化的时间,如果tuple没有指定,那么默认为localtime(),具体的格式化字符串如下:

DirectiveMeaningNotes
%a
Locale’s abbreviated weekday name.
%A
Locale’s full weekday name.
%b
Locale’s abbreviated month name.
%B
Locale’s full month name.
%c
Locale’s appropriate date and time representation.
%d
Day of the month as a decimal number [01,31].
%H
Hour (24-hour clock) as a decimal number [00,23].
%I
Hour (12-hour clock) as a decimal number [01,12].
%j
Day of the year as a decimal number [001,366].
%m
Month as a decimal number [01,12].
%M
Minute as a decimal number [00,59].
%p
Locale’s equivalent of either AM or PM.(1)
%S
Second as a decimal number [00,61].(2)
%U
Week number of the year (Sunday as the first day of the week) as a decimal number [00,53]. All days in a new year preceding the first Sunday are considered to be in week 0.(3)
%w
Weekday as a decimal number [0(Sunday),6].
%W
Week number of the year (Monday as the first day of the week) as a decimal number [00,53]. All days in a new year preceding the first Monday are considered to be in week 0.(3)
%x
Locale’s appropriate date representation.
%X
Locale’s appropriate time representation.
%y
Year without century as a decimal number [00,99].
%Y
Year with century as a decimal number.
%Z
Time zone name (no characters if no time zone exists).
%%
A literal
'%'
character.
>>> time.strftime("%a, %d %b %Y %H:%M:%S +0000", time.gmtime())
'Fri, 18 Mar 2016 14:51:31 +0000'


11.time.strptime(string[,format]):将格式化字符串转换为struct_time,如果不指定格式化的字符串默认为"%a %b %d %H:%M:%S %Y"

>>> time.strptime("30 Nov 00", "%d %b %y")
time.struct_time(tm_year=2000, tm_mon=11, tm_mday=30, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=3, tm_yday=335, tm_isdst=-1
)[/code]

12.time.time():返回一个浮点型的秒,相对于1970年的1月1日0点

>>> time.time()
1458312997.148
>>> time.ctime(1458312997.148)
'Fri Mar 18 22:56:37 2016'


13.time.timezone:返回一个当前时区相对于标准时区的偏移量,altzone和timezone的区别是一个是启用DST一个不用

>>> time.altzone
-32400
>>> time.timezone
-28800


14.time.tzname: 返回一个含有两个字符串的元组,第一表示非DST的timezone名字,第二个表示DST timezone名字

>>> time.tzname
('CST', 'CST')


15.time.tzset():重新设置环境变量TZ(只在UNIX系统中存在)

>>> os.environ['TZ'] = 'EST+05EDT,M4.1.0,M10.5.0'
>>> time.tzset()
>>> time.strftime('%X %x %Z')
'02:07:36 05/08/03 EDT'
>>> os.environ['TZ'] = 'AEST-10AEDT-11,M10.5.0,M3.5.0'
>>> time.tzset()
>>> time.strftime('%X %x %Z')
'16:08:12 05/08/03 AEST'


>>> os.environ['TZ'] = 'US/Eastern'
>>> time.tzset()
>>> time.tzname
('EST', 'EDT')
>>> os.environ['TZ'] = 'Egypt'
>>> time.tzset()
>>> time.tzname
('EET', 'EEST')


更多关于时间的函数,还可以参考datetime,locale,calendar模块

附录豆瓣对时区的解释
24时区,GMT,UTC,DST,CST时间详解:
全球24个时区的划分
相较于两地时间表,可以显示世界各时区时间和地名的世界时区表(World Time),就显得精密与复杂多了,通常世界时区表的表盘上会标示着全球24个时区的城市名称,但究竟这24个时区是如何产生的?过去世界各地原本各自订定当地时间,但随着交通和电讯的发达,各地交流日益频繁,不同的地方时间,造成许多困扰,于是在西元1884年的国际会议上制定了全球性的标准时,明定以英国伦敦格林威治这个地方为零度经线的起点(亦称为本初子午线),并以地球由西向东每24小时自转一周360°,订定每隔经度15°,时差1小时。而每15°的经线则称为该时区的中央经线,将全球划分为24个时区,其中包含23个整时区及180°经线左右两侧的2个半时区。就全球的时间来看,东经的时间比西经要早,也就是如果格林威治时间是中午12时,则中央经线15°E的时区为下午1时,中央经线30°E时区的时间为下午2时;反之,中央经线15°W的时区时间为上午11时,中央经线30°W时区的时间为上午10时。以台湾为例,台湾位于东经121°,换算后与格林威治就有8小时的时差。如果两人同时从格林威治的0°各往东、西方前进,当他们在经线180°时,就会相差24小时,所以经线180°被定为国际换日线,由西向东通过此线时日期要减去一日,反之,若由东向西则要增加一日。

格林威治标准时间GMT
十七世纪,格林威治皇家天文台为了海上霸权的扩张计画而进行天体观测。1675年旧皇家观测所(Old Royal Observatory) 正式成立,到了1884年决定以通过格林威治的子午线作为划分地球东西两半球的经度零度。观测所门口墙上有一个标志24小时的时钟,显示当下的时间,对全球而言,这里所设定的时间是世界时间参考点,全球都以格林威治的时间作为标准来设定时间,这就是我们耳熟能详的「格林威治标准时间」(Greenwich Mean Time,简称G.M.T.)的由来,标示在手表上,则代表此表具有两地时间功能,也就是同时可以显示原居地和另一个国度的时间。

世界协调时间UTC
多数的两地时间表都以GMT来表示,但也有些两地时间表上看不到GMT字样,出现的反而是UTC这3个英文字母,究竟何谓UTC?事实上,UTC指的是Coordinated Universal Time- 世界协调时间(又称世界标准时间、世界统一时间),是经过平均太阳时(以格林威治时间GMT为准)、地轴运动修正后的新时标以及以「秒」为单位的国际原子时所综合精算而成的时间,计算过程相当严谨精密,因此若以「世界标准时间」的角度来说,UTC比GMT来得更加精准。其误差值必须保持在0.9秒以内,若大于0.9秒则由位于巴黎的国际地球自转事务中央局发布闰秒,使UTC与地球自转周期一致。所以基本上UTC的本质强调的是比GMT更为精确的世界时间标准,不过对于现行表款来说,GMT与UTC的功能与精确度是没有差别的。

夏日节约时间DST
所谓「夏日节约时间」Daylight Saving Time(简称D.S.T.),是指在夏天太阳升起的比较早时,将时钟拨快一小时,以提早日光的使用,在英国则称为夏令时间(Summer Time)。这个构想于1784年由美国班杰明·富兰克林提出来,1915年德国成为第一个正式实施夏令日光节约时间的国家,以削减灯光照明和耗电开支。自此以后,全球以欧洲和北美为主的约70个国家都引用这个做法。目前被划分成两个时区的印度也正在商讨是否全国该统一实行夏令日光节约时间。欧洲手机上也有很多GSM系统的基地台,除了会传送当地时间外也包括夏令日光节约时间,做为手机的时间标准,使用者可以自行决定要开启或关闭。值得注意的是,某些国家有实施「夏日节约时间」的制度,出国时别忘了跟随当地习惯在表上调整一下,这可是机械表没有的功能设计哦!

CST时间

CST却同时可以代表如下 4 个不同的时区:

Central Standard Time (USA) UT-6:00

Central Standard Time (Australia) UT+9:30

China Standard Time UT+8:00

Cuba Standard Time UT-4:00

可见,CST可以同时表示美国,澳大利亚,中国,古巴四个国家的标准时间。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: