python大道至简(第四部分)

作者:下家山(qq:1209050967,微信:xiajiashan)

python大道至简(第三部分)

二十八:时间和日期

28.1 时间模块time

Time 模块包含了以下内置函数,既有时间处理相关的,也有转换时间格式的:

28.1.1 time.time()

返回当前时间的时间戳(1970纪元后经过的浮点秒数)。

python大道至简(第四部分)_第1张图片

  问题一:为什么是1970年呢?

  因为在计算机中,「时间戳」一般是指 Unix 时间戳,即自从 Unix 纪元(格林威治时间 1970 1 1 00:00:00)到当前时间的秒数。

  什么是时间戳呢?

  不要被「戳」吓到了,就是一个表示当前时间的数字。
「时间戳」这个名字的来源于 Timestamp,为什么是stamp 邮戳呢?
  看下图:
python大道至简(第四部分)_第2张图片
作者:Dion
链接:https://www.zhihu.com/question/20563825/answer/15492203
来源:知乎
后面有四位小数,表示可以精确到10微妙!

时间戳单位最适于做日期运算。但是1970年之前的日期就无法以此表示了。太遥远的日期也不行,UNIXWindows只支持到2038年。

28.1.2 time.localtime([secs])

接收时间辍(1970纪元后经过的浮点秒数)并返回当地时间下的时间元组tt.tm_isdst可取01,取决于当地当时是不是夏令时)

python大道至简(第四部分)_第3张图片

 Time.localtime函数能够把一个秒数转成一个名为struct_time的类

28.1.3 time.gmtime(secs)

接收时间辍(1970纪元后经过的浮点秒数)并返回格林威治天文时间下的时间元组t。注:t.tm_isdst始终为0

python大道至简(第四部分)_第4张图片

 

那么time.gmtimetime.localtime有什么区别呢?

传空的时候

python大道至简(第四部分)_第5张图片

传0的时候

python大道至简(第四部分)_第6张图片

28.1.4什么struct_time类

  具体的类后面再介绍!这里只做相关介绍!

  下面是通过得到的信息

 python大道至简(第四部分)_第7张图片

这些类成员解释如下:

python大道至简(第四部分)_第8张图片

28.1.5 time.asctime

接受时间元组并返回一个可读的形式为"TueJun 27 23:56:30 2017"2017627 周二235630秒)的24个字符的字符串。

下面所得到的时间,虽然比秒数获取的信息好一点,但是可读性并不高

下面是通过help获取的帮助信息

python大道至简(第四部分)_第9张图片

Asctime方法传进去一个时间元组(struct_time到底是一个类还是一个元组,我感觉python的帮助系统也有矛盾的地方),返回一个时间字符串。

python大道至简(第四部分)_第10张图片

28.1.6 time.ctime([secs])

接收秒数,返回时间字符串。

python大道至简(第四部分)_第11张图片

注意:time.ctime(0)为什么返回的不是00:00:00而是08:00:00,因为我们和英国时区差8个小时

28.1.7 time.strftime(fmt[,tupletime])

接收以时间元组,并返回以可读字符串表示的当地时间,格式由fmt决定

格式化成:2017-06-28 14:10:58形式

 python大道至简(第四部分)_第12张图片

格式化成:Wed Jun 28 14:15:47 2017形式

 python大道至简(第四部分)_第13张图片

28.1.8 time.mktime(tupletime)

接受时间元组并返回时间辍(1970纪元后经过的浮点秒数)

python大道至简(第四部分)_第14张图片

比如,我们得到一个类似于’Web Jun 28 14:15:47 2017’的时间字符串,如果要把这个时间转为时间戳表示的秒数,就可以通过time.mktime方法和time.strptime方法。

28.1.9 time.strptime(str,fmt='%a %b %d%H:%M:%S %Y')

根据fmt的格式把一个时间字符串解析为时间元组。

使用help(time.strptime)获取到的帮助信息

python大道至简(第四部分)_第15张图片

28.1.10 time.sleep(secs)

推迟调用线程的运行,secs指秒数

python大道至简(第四部分)_第16张图片


28.1.11 time.altzone

         返回本地实际和格林威治时间相差的秒数,如果该地区在格林威治东部会返回负值(如西欧,包括英国)。对夏令时启用地区才能使用。

python大道至简(第四部分)_第17张图片

  因为我们与格林威治时间相差8个小时,8小时刚好就是28800秒,即我们比英国造8个小时!

http://blog.csdn.net/wind19/article/details/50233035

python大道至简(第四部分)_第18张图片

28.1.12time.tzset()

Python time tzset() 根据环境变量TZ重新初始化时间。

python大道至简(第四部分)_第19张图片

我们经常看到北京时间是GMT+8,有时候也叫UTC+8

那么什么是GMT,什么是UTC

GMTGreenwish Mean Time 格林威治平时),这是UTC的民间名称。GMT=UTC

UTCUniversal Time Coordinate 协调世界时)是基于原子时钟的时间。什么是原子时钟?个人认为就是一个很小的,长度固定的,不可再分的时间段。所以UTC的时间是均匀的。为了能够尽量减小和UT时间的误差,UTC引入了闰秒(在某些年份的最后一分钟是61秒),以确保UTCUT1之间的误差在0.9秒之内。若大于0.9秒则由位于巴黎的国际地球自转事务中央局发布闰秒,使UTC与地球自转周期一致。

EST时间和EDT时间

相信不少人对于美国的时间的感觉都比较混乱吧?什么东部时间西部时间 太平洋时间,山地时间,夏令时等等.

EDT(Eastern DaylightTiming)指美国东部夏令时间。东部时区慢北京时间12小时。
EST eastern standard time (美国)东部标准时间  慢北京时间 13个小时。

 

http://www.12sign.cn/htmls/help/worldtimezone.htm

AEDT(AustralianEastern Daylight Time澳大利亚东部夏令时, 时间是GMT+11即比格林威治时间快11小时(也即比北京快3小时)

AEST(Australian Eastern Stand Time澳大利亚东部标准时间,时间是GMT+10即比格林威治时间快10小时(也即比北京时间快2小时)

28.1.13  time.tzname

属性time.tzname包含一对根据情况的不同而不同的字符串,分别是带夏令时的本地时区名称,和不带的。

python大道至简(第四部分)_第20张图片

python大道至简(第四部分)_第21张图片

28.1.14 time.timezone

属性time.timezone是当地时区(未启动夏令时)距离格林威治的偏移秒数(>0,美洲;<=0大部分欧洲,亚洲,非洲)。

python大道至简(第四部分)_第22张图片

28.2 python中时间输出格式符

python中时间日期格式化符号:

%y 两位数的年份表示(00-99

%Y 四位数的年份表示(000-9999

%H 24小时制小时数(0-23

%I 12小时制小时数(01-12

%j 年内的一天(001-366

%S 秒(00-59

%m 月份(01-12

%M 分钟数(00=59

%a 本地简化星期名称

%A 本地完整星期名称

%p 本地A.M.P.M.的等价符

%Z 当前时区的名称

%b 本地简化的月份名称

%B 本地完整的月份名称

%d 月内中的一天(0-31

%c 本地相应的日期表示和时间表示

%x 本地相应的日期表示    %X 本地相应的时间表示

%w 星期(0-6),星期天为星期的开始

%% %号本身

python大道至简(第四部分)_第23张图片

关于时区的详解

http://blog.csdn.net/wb96a1007/article/details/7945021

python大道至简(第四部分)_第24张图片

 28.3 日历calendar

28.3.1 打印某一月的日历calendar.month(year,month,w=2,l=1)方法

       返回某一年(由year指定),某一月(由month指定)的日历,并以格式化字符串的形式输出,形如:

python大道至简(第四部分)_第25张图片

输出格式有以下特点:

python大道至简(第四部分)_第26张图片

 实验如下:

python大道至简(第四部分)_第27张图片

注意:直接输出calendar.month返回的对象,是以字符串的形式输出。是数据在计算机内存中本来存放的形式。

     而当我们用print函数输出calendar.month的返回对象的时候,因为有print函数的作用,输出的格式以方便用户为目的,直观好看。

     这个特点,跟strrepr函数很相似。

                                                                                            

问题:w,l参数怎么设置呢?

下面是python 2.7 中输入help(calendar.month)的帮助信息

python大道至简(第四部分)_第28张图片

python大道至简(第四部分)_第29张图片

w默认为2,当设置为0,1的时候不生效

l默认为1,当设置为0的时候无效。

28.3.2 判断某一年是否为闰年calendar.isleap(year)

python大道至简(第四部分)_第30张图片

闰年的计算方法

闰年的条件是:

:能被4整除,但不能被100整除的年份(例如2008是闰年,1900不是闰年)

:能被400整除的年份(例如2000)也是闰年。

闰年的原因

http://jingyan.baidu.com/article/e5c39bf563eaaf39d7603380.html

28.3.3 输出某一年的日历calendar.calendar(year,w=2,l=1,c=6)

返回某一年(由year指定)的日历,三个月为一行,并以格式化字符串的形式输出,w表示每日的间隔宽度,l表示有效行数,c表示每个月之间的间距

python大道至简(第四部分)_第31张图片

 

28.3.4 以列表形式输出某年某月的日历calendar.monthcalendar(year,month)

    以列表的形式返回某年某月的日历

python大道至简(第四部分)_第32张图片

Calendar.month.calendar的返回值是一个嵌套的列表,就是列表中的成员是一列表,每个成员是一周的日期,

当月以外的日子以0表示,嵌套的列表,每周为一个单位。

Pycharm中为什么说不能使用calendar.month(year,month)?

python大道至简(第四部分)_第33张图片

在windows中,python 3.6是可以的

python大道至简(第四部分)_第34张图片

28.3.5 设置一周是以星期几作为第一天calendar.setfirstweekday(0~6)

设置星期几作为一个星期的第一天,周一是0,周日是6.

python大道至简(第四部分)_第35张图片

28.3.6 判断某年某月某一天是星期几calendar.weekday(year,month,day)

python大道至简(第四部分)_第36张图片

你可能感兴趣的:(pyhton)