Python datetime 相关模块

关于时间和日期模块

python程序能用很多方式处理日期和时间,转换日期格式是一种常见的功能。

python提供了一个time和calendar模块可以用于格式化日期和时间。

时间间隔是以秒为单位的浮点小数

每个时间戳都以自从1970年1月1日午夜(历元)经过了多长时间来表示。

python的time模块下有很多函数可以转换常见的日期格式。

一、Time模块

1.1 名词解释

UTC :格林威治天文时间,世界标准时间,在中国为UTC-8

DST:夏令时是一种节约能源而人为规定的时间制度,在夏季调快一小时.

1.2 时间的表示形式

扫描二维码关注公众号,回复: 2573066 查看本文章

1.时间戳

以整数或浮点型表示的是一个秒为单位的时间间隔,这个时间的基础值1970.1.1的零点开始算起

 

2.元组格式

采用python的数据结构表示,这个元组有9个整型内容,分别表示不同含义

year month day hours minutes seconds weekday Julia day(儒略日(天文时间)) flag[标记夏令时]

 

3.格式化字符串

eg : %Y 完整年份

 

获取当前时间

1、time.clock()

以浮点数计算秒数,返回程序运行的时间。

用处:可用来计算一段程序运行的时间。

2、time.sleep(seconds)

程序休眠seconds再执行下面的语句。单位s

3、time.time() 时间戳

返回一个浮点型数据

格林威治时间1970年01月01日00时00分00秒(北京时间1970年01月01日08时00分00秒)起至现在的总秒数。它的提出主要是为用户提供一份电子证据, 以证明用户的某些数据的产生时间。

4、time.gmtime(时间戳)

把时间戳转成格林威治时间,返回一个时间元组

import datatime

import time

time1 = time.time()

gm = time.gmtime(time1)

print(gm)

time.struct_time(tm_year=2018, tm_mon=7, tm_mday=15, tm_hour=6, tm_min=22, tm_sec=45, tm_wday=6, tm_yday=196, tm_isdst=0(是否为夏令时))

5、time.localtime(时间戳)

把时间戳转成本地时间,返回一个时间元组。(如中国时区,加上8个小时)

time1 = time.time()

lm = time.localtime(time1)

print(lm)

6、time.asctime(时间元组)

将时间元组转成一个字符串。

lm2 = time.localtime(1531650143)

st = time.asctime(lm2)

print(st)

输出:

Sun Jul 15 18:22:23 2018

7、time.ctime(时间戳)

将时间戳转成一个字符串。

time1 = time.time()

ct = time.ctime(time1)

print(ct)

8、time.strftime(format,时间元组)

将时间元组转成指定格式的字符串。

time1 = time.time()

lm = time.localtime(time1)

sct = time.strftime("%Y-%m-%d %X",lm)

print(sct)

输出:2018-07-15 15:18:35

 

二、date类

(一)、date对象构成

1、date对象由year年份、month月份及day日期三部分构成:

date(year,month,day)

2、 通过yearmonthday三个数据描述符可以进行访问:

>>> a = datetime.date.today()

>>> a

>>> a.year

>>> a.month

>>> a.day

  •  

3、当然,你也可以用__getattribute__(...)方法获得上述值:

>>> a.__getattribute__('year')2018

>>> a.__getattribute__('month')7

>>> a.__getattribute__('day')15

(二)、date对象中包含的方法与属性

1、用于日期比较大小的方法

方法名  

方法说明

用法

__eq__(…)

等于(x==y)

x.__eq__(y)

__ge__(…)

大于等于(x>=y)

x.__ge__(y)

__gt__(…)

大于(x>y)

x.__gt__(y)

__le__(…)

小于等于(x<=y)

x.__le__(y)

__lt__(…)

小于(x<=y)

x.__lt__(y)

__ne__(…)

不等于(x!=y)

x.__ne__(y)

以上方法的返回值为True\False 
示例如下:

>>> a=datetime.date(2018,7,1)

>>> b=datetime.date(2018,7,15)

>>> a.__eq__(b)False

>>> a.__ge__(b)False

>>> a.__gt__(b)False

>>> a.__le__(b)True

>>> a.__lt__(b)True>

>> a.__ne__(b)True

2、获得二个日期相差多少天

使用__sub__(...)__rsub__(...)方法,其实二个方法差不太多,一个是正向操作,一个是反向操作:

方法名

方法说明

用法

__sub__(…)

x - y

x.__sub__(y)

__rsub__(…)

y - x

x.__rsub__(y)

示例如下:

>>> a=datetime.date(2018, 7, 16)

>>> b=datetime.date(2018, 7, 15)

>>> a.__sub__(b)

datetime.timedelta(1)

>>> a.__rsub__(b)

datetime.timedelta(-1)

计算结果的返回值类型为datetime.timedelta, 如果获得整数类型的结果则按下面的方法操作:

>>> a.__sub__(b).days

1

>>> a.__rsub__(b).days

-1

3、ISO标准化日期

如果想要让所使用的日期符合ISO标准,那么使用如下三个方法: 
1).isocalendar(...)*:返回一个包含三个值的元组,三个值依次为:year年份,week number周数,weekday星期数(周一为1…周日为7): 
示例如下

>>> a = datetime.date(2018,7,15)

>>> a.isocalendar()

(2018, 28, 7)#2018年第28周的周日

>>> a.isocalendar()[0]2018

>>> a.isocalendar()[1]28

>>> a.isocalendar()[2]7

 

2). isoformat(...): 返回符合ISO 8601标准 (YYYY-MM-DD) 的日期字符串; 
示例如下

>>> a = datetime.date(2018,7,15)

>>> a.isoformat()'2018-07-15'

3). isoweekday(...): 返回符合ISO标准的指定日期所在的星期数(周一为1…周日为7) 
示例如下:

>>> a = datetime.date(2018,7,15)

>>> a.isoweekday()7

4).与isoweekday(...)相似的还有一个weekday(...)方法,只不过是weekday(...)方法返回的周一为 0, 周日为 6 
示例如下:

>>> a = datetime.date(2018,7,15)

>>> a.weekday()6

(三)、日期的字符串输出

1、如果你想将日期对象转化为字符串对象的话,可以用到__format__(...)方法以指定格式进行日期输出:

>>> a = datetime.date(2018,7,16)

>>> a.__format__('%Y-%m-%d')'2018-07-16'

>>> a.__format__('%Y/%m/%d')'2018/07/16'

>>> a.__format__('%y/%m/%d')'18/07/16'

与此方法等价的方法为strftime(...)

>>> a.strftime("%Y%m%d")'20180716'

关于格式化字符串的相关内容,请查阅本文最后的:附录:python中时间日期格式化符号 
2、如果只是相简单的获得日期的字符串,则使用__str__(...)

>>> a.__str__()'2018-07-16'

 

、datetime类

(一)、datetime类的数据构成

datetime类其实是可以看做是date类和time类的合体,其大部分的方法和属性都继承于这二个类,相关的操作方法请参阅,本文上面关于二个类的介绍。其数据构成也是由这二个类所有的属性所组成的。

 datetime(year, month, day, hour, minute, second, microsecond(#微秒10^6秒#),tzinfo(#设置时区tzinfo = UTC(8)代表北京时间#))

(二)、专属于datetime的方法和属性

1、 date(…):返回datetime对象的日期部分:

>>> a = datetime.datetime.now()

>>> a

datetime.datetime(2018, 7, 15, 16, 9, 33, 494248)

>>> a.date()

datetime.date(2018, 7, 15)

2、time(…):返回datetime对象的时间部分:

>>> a = datetime.datetime.now()

>>> a

datetime.datetime(2018, 7, 15, 16, 9, 33, 494248)

>>> a.time()

datetime.time(16, 9, 33, 494248)#时 分  秒 微秒

3、utctimetuple(…):返回时间元组:

>>> a = datetime.datetime.now()

>>> a

datetime.datetime(2018, 7, 16, 16, 9, 33, 494248)

>>> a.utctimetuple()

time.struct_time(tm_year=2018, tm_mon=7, tm_mday=16, tm_hour=16, tm_min=9, tm_sec=33, tm_wday=2, tm_yday=81, tm_isdst=0)

4、now(…):返回当前日期时间的datetime对象:

>>> a = datetime.datetime.now()

>>> a

datetime.datetime(2018, 3, 16, 16, 9, 33, )

5、utcnow(…):返回当前日期时间的UTC datetime对象:#格林威治时间

>>> a = datetime.datetime.utcnow()

>>> a

datetime.datetime(2018, 7, 15, 8, 26, 54, 935242)

附录: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

当前时区的名称

%%

%号本身

验证代码

import time

time1 = time.time()

a = time.localtime(time1)

s = time.strftime('''a: %a |A: %A |b: %b |B: %B |c: %c |d: %d

H: %H |I: %I |j: %j |m: %m |M: %M |p: %p

S: %S |U: %U |w: %w |W: %W |x: %x |X: %X

y: %y |Y: %Y |z: %z |%% ''',a)

print(s)

猜你喜欢

转载自blog.csdn.net/weixin_41918841/article/details/81101479