【Python】基础部分 -- 常用模块 -- time \ datetime 时间

1)   time

类名称

描述

time.time()    

#现在的时间戳

time.localtime()

#本时区时间的struct_time

time.gmtime(float)

#0时区的struct_time

time.mktime(tuple)

#把struct_time转成时间戳

time.sleep(int)

#制造延迟

time.asctime()       

#把一个表示时间的元组或 struct_time 表现为tuple

time.ctime(float)

#把时间戳转换成字符串

time.strftime(format,tuple)  

#把代表时间的元组或struct_time 转为格式化的时间字符串

time.strptime(str,format)

#把字符串转换成时间戳

 

 

1)   datetime封装过的time

datetime模块提供了处理日期和时间的类,既有简单的方式,又有复杂的方式。它虽然支持日期和时间算法,但其实现的重点是为输出格式化和操作提供高效的属性提取功能。

1. datetime模块中定义的类

datetime模块定义了以下几个类:

类名称

描述

datetime.date

表示日期,常用的属性有:year, month和day

datetime.time

表示时间,常用属性有:hour, minute, second, microsecond

datetime. datetime

表示日期时间

datetime. timedelta

表示两个date、time、datetime实例之间的时间间隔,分辨率(最小单位)可达到微秒

datetime.tzinfo

时区相关信息对象的抽象基类。它们由datetime和time类使用,以提供自定义时间的而调整。

datetime.timezone

Python 3.2中新增的功能,实现tzinfo抽象基类的类,表示与UTC的固定偏移量

需要说明的是:这些类的对象都是不可变的。

类之间的关系:

object

 date

 datetime

 time

 timedelta

 tzinfo

 timezone

2. datetime模块中定义的常量

常量名称

描述

datetime.MINYEAR

datetime.date或datetime.datetime对象所允许的年份的最小值,值为1

datetime.MAXYEAR

datetime.date或datetime.datetime对象所允许的年份的最大值,只为9999

3. datetime.date类

datetime.date类的定义

class datetime.date(year, month, day)

year, month 和 day都是是必须参数,各参数的取值范围为:

参数名称

取值范围

year

[MINYEAR, MAXYEAR]

month

[1, 12]

day

[1, 指定年份的月份中的天数]

类方法和属性

类方法/属性名称

描述

date.max

date对象所能表示的最大日期:9999-12-31

date.min

date对象所能表示的最小日志:00001-01-01

date.resoluation

date对象表示的日期的最小单位:天

date.today()

返回一个表示当前本地日期的date对象

date.fromtimestamp(timestamp)

根据跟定的时间戳,返回一个date对象

对象方法和属性

对象方法/属性名称

描述

d.year

d.month

d.day

d.replace(year[, month[, day]])

生成并返回一个新的日期对象,原日期对象不变

d.timetuple()

返回日期对应的time.struct_time对象

d.toordinal()

返回日期是是自 0001-01-01 开始的第多少天

d.weekday()

返回日期是星期几,[0, 6],0表示星期一

d.isoweekday()

返回日期是星期几,[1, 7], 1表示星期一

d.isocalendar()

返回一个元组,格式为:(year, weekday, isoweekday)

d.isoformat()

返回‘YYYY-MM-DD'格式的日期字符串

d.strftime(format)

返回指定格式的日期字符串,与time模块的strftime(format, struct_time)功能相同

实例

>>> import time

>>> from datetime import date

>>> 

>>> date.max

datetime.date(9999, 12, 31)

>>> date.min

datetime.date(1, 1, 1)

>>> date.resolution

datetime.timedelta(1)

>>> date.today()

datetime.date(2017, 2, 4)

>>> date.fromtimestamp(time.time())

datetime.date(2017, 2, 4)

>>> 

>>> d = date.today()

>>> d.year

2017

>>> d.month

2

>>> d.day

4

>>> d.replace(2016)

datetime.date(2016, 2, 4)

>>> d.replace(2016, 3)

>>> d.replace(2016, 3, 2)

datetime.date(2016, 3, 2)

>>> d.timetuple()

time.struct_time(tm_year=2017, tm_mon=2, tm_mday=4, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=5, tm_yday=35, tm_isdst=-1)

>>> d.toordinal()

736364

>>> d.weekday()

5

>>> d.isoweekday()

6

>>> d.isocalendar()

(2017, 5, 6)

>>> d.isoformat()

'2017-02-04'

>>> d.ctime()

'Sat Feb 4 00:00:00 2017'

>>> d.strftime('%Y/%m/%d')

'2017/02/04'

 

 

datetime.time类

time类的定义

class datetime.time(hour, [minute[, second, [microsecond[, tzinfo]]]])

hour为必须参数,其他为可选参数。各参数的取值范围为:

参数名称

取值范围

hour

[0, 23]

minute

[0, 59]

second

[0, 59]

microsecond

[0, 1000000]

tzinfo

tzinfo的子类对象,如timezone类的实例

类方法和属性

类方法/属性名称

描述

time.max

time类所能表示的最大时间:time(23, 59, 59, 999999)

time.min

time类所能表示的最小时间:time(0, 0, 0, 0)

time.resolution

时间的最小单位,即两个不同时间的最小差值:1微秒

对象方法和属性

对象方法/属性名称

描述

t.hour

t.minute

t.second

t.microsecond

微秒

t.tzinfo

返回传递给time构造方法的tzinfo对象,如果该参数未给出,则返回None

t.replace(hour[, minute[, second[, microsecond[, tzinfo]]]])

生成并返回一个新的时间对象,原时间对象不变

t.isoformat()

返回一个‘HH:MM:SS.%f'格式的时间字符串

t.strftime()

返回指定格式的时间字符串,与time模块的strftime(format, struct_time)功能相同

实例

>>> from datetime import time

>>> 

>>> time.max

datetime.time(23, 59, 59, 999999)

>>> time.min

datetime.time(0, 0)

>>> time.resolution

datetime.timedelta(0, 0, 1)

>>> 

>>> t = time(20, 5, 40, 8888)

>>> t.hour

20

>>> t.minute

5

>>> t.second

40

>>> t.microsecond

8888

>>> t.tzinfo

>>> 

>>> t.replace(21)

datetime.time(21, 5, 40, 8888)

>>> t.isoformat()

'20:05:40.008888'

>>> t.strftime('%H%M%S')

'200540'

>>> t.strftime('%H%M%S.%f')

'200540.008888'

5. datetime.datetime类

datetime类的定义

复制代码 代码如下:


class datetime.datetime(year, month, day, hour=0, minute=0, second=0, microsecond=0, tzinfo=None)

year, month 和 day是必须要传递的参数, tzinfo可以是None或tzinfo子类的实例。

各参数的取值范围为:

参数名称

取值范围

year

[MINYEAR, MAXYEAR]

month

[1, 12]

day

[1, 指定年份的月份中的天数]

hour

[0, 23]

minute

[0, 59]

second

[0, 59]

microsecond

[0, 1000000]

tzinfo

tzinfo的子类对象,如timezone类的实例

如果一个参数超出了这些范围,会引起ValueError异常。

类方法和属性

类方法/属性名称

描述

datetime.today()

返回一个表示当前本期日期时间的datetime对象

datetime.now([tz])

返回指定时区日期时间的datetime对象,如果不指定tz参数则结果同上

datetime.utcnow()

返回当前utc日期时间的datetime对象

datetime.fromtimestamp(timestamp[, tz])

根据指定的时间戳创建一个datetime对象

datetime.utcfromtimestamp(timestamp)

根据指定的时间戳创建一个datetime对象

datetime.combine(date, time)

把指定的date和time对象整合成一个datetime对象

datetime.strptime(date_str, format)

将时间字符串转换为datetime对象

对象方法和属性

对象方法/属性名称

描述

dt.year, dt.month, dt.day

年、月、日

dt.hour, dt.minute, dt.second

时、分、秒

dt.microsecond, dt.tzinfo

微秒、时区信息

dt.date()

获取datetime对象对应的date对象

dt.time()

获取datetime对象对应的time对象, tzinfo 为None

dt.timetz()

获取datetime对象对应的time对象,tzinfo与datetime对象的tzinfo相同

dt.replace([year[, month[, day[, hour[, minute[, second[, microsecond[, tzinfo]]]]]]]])

生成并返回一个新的datetime对象,如果所有参数都没有指定,则返回一个与原datetime对象相同的对象

dt.timetuple()

返回datetime对象对应的tuple(不包括tzinfo)

dt.utctimetuple()

返回datetime对象对应的utc时间的tuple(不包括tzinfo)

dt.toordinal()

同date对象

dt.weekday()

同date对象

dt.isocalendar()

同date独享

dt.isoformat([sep])

返回一个‘%Y-%m-%d

dt.ctime()

等价于time模块的time.ctime(time.mktime(d.timetuple()))

dt.strftime(format)

返回指定格式的时间字符串

实例

>>> from datetime import datetime, timezone

>>> 

>>> datetime.today()

datetime.datetime(2017, 2, 4, 20, 44, 40, 556318)

>>> datetime.now()

datetime.datetime(2017, 2, 4, 20, 44, 56, 572615)

>>> datetime.now(timezone.utc)

datetime.datetime(2017, 2, 4, 12, 45, 22, 881694, tzinfo=datetime.timezone.utc)

>>> datetime.utcnow()

datetime.datetime(2017, 2, 4, 12, 45, 52, 812508)

>>> import time

>>> datetime.fromtimestamp(time.time())

datetime.datetime(2017, 2, 4, 20, 46, 41, 97578)

>>> datetime.utcfromtimestamp(time.time())

datetime.datetime(2017, 2, 4, 12, 46, 56, 989413)

>>> datetime.combine(date(2017, 2, 4), t)

datetime.datetime(2017, 2, 4, 20, 5, 40, 8888)

>>> datetime.strptime('2017/02/04 20:49', '%Y/%m/%d %H:%M')

datetime.datetime(2017, 2, 4, 20, 49)

>>> dt = datetime.now()

>>> dt

datetime.datetime(2017, 2, 4, 20, 57, 0, 621378)

>>> dt.year

2017

>>> dt.month

2

>>> dt.day

4

>>> dt.hour

20

>>> dt.minute

57

>>> dt.second

0

>>> dt.microsecond

621378

>>> dt.tzinfo

>>> dt.timestamp()

1486213020.621378

>>> dt.date()

datetime.date(2017, 2, 4)

>>> dt.time()

datetime.time(20, 57, 0, 621378)

>>> dt.timetz()

datetime.time(20, 57, 0, 621378)

>>> dt.replace()

datetime.datetime(2017, 2, 4, 20, 57, 0, 621378)

>>> dt.replace(2016)

datetime.datetime(2016, 2, 4, 20, 57, 0, 621378)

>>> dt.timetuple()

time.struct_time(tm_year=2017, tm_mon=2, tm_mday=4, tm_hour=20, tm_min=57, tm_sec=0, tm_wday=5, tm_yday=35, tm_isdst=-1)

>>> dt.utctimetuple()

time.struct_time(tm_year=2017, tm_mon=2, tm_mday=4, tm_hour=20, tm_min=57, tm_sec=0, tm_wday=5, tm_yday=35, tm_isdst=0)

>>> dt.toordinal()

736364

>>> dt.weekday()

5

>>> dt.isocalendar()

(2017, 5, 6)

>>> dt.isoformat()

'2017-02-04T20:57:00.621378'

>>> dt.isoformat(sep='/')

'2017-02-04/20:57:00.621378'

>>> dt.isoformat(sep=' ')

'2017-02-04 20:57:00.621378'

>>> dt.ctime()

'Sat Feb 4 20:57:00 2017'

>>> dt.strftime('%Y%m%d %H:%M:%S.%f')

'20170204 20:57:00.621378'

6. 使用datetime.datetime类对时间戳与时间字符串进行转换

 

 

7. datetime.timedelta类

timedelta对象表示连个不同时间之间的差值。如果使用time模块对时间进行算术运行,只能将字符串格式的时间 和 struct_time格式的时间对象 先转换为时间戳格式,然后对该时间戳加上或减去n秒,最后再转换回struct_time格式或字符串格式,这显然很不方便。而datetime模块提供的timedelta类可以让我们很方面的对datetime.date, datetime.time和datetime.datetime对象做算术运算,且两个时间之间的差值单位也更加容易控制。
 这个差值的单位可以是:天、秒、微秒、毫秒、分钟、小时、周。

datetime.timedelta类的定义

复制代码 代码如下:


class datetime.timedelta(days=0, seconds=0, microseconds=0, milliseconds=0, hours=0, weeks=0)

所有参数都是默认参数,因此都是可选参数。参数的值可以是整数或浮点数,也可以是正数或负数。内部值存储days、seconds 和 microseconds,其他所有参数都将被转换成这3个单位:

  • 1毫秒转换为1000微秒
  • 1分钟转换为60秒
  • 1小时转换为3600秒
  • 1周转换为7天

然后对这3个值进行标准化,使得它们的表示是唯一的:

  • microseconds : [0, 999999]
  • seconds : [0, 86399]
  • days : [-999999999, 999999999]

类属性

类属性名称

描述

timedelta.min

timedelta(-999999999)

timedelta.max

timedelta(days=999999999, hours=23, minutes=59, seconds=59, microseconds=999999)

timedelta.resolution

timedelta(microseconds=1)

实例方法和属性

实例方法/属性名称

描述

td.days

天 [-999999999, 999999999]

td.seconds

秒 [0, 86399]

td.microseconds

微秒 [0, 999999]

td.total_seconds()

时间差中包含的总秒数,等价于: td / timedelta(seconds=1)

 

方法/属性

描述

datetime.datetime.now()

返回当前本地时间(datetime.datetime对象实例)

datetime.datetime.fromtimestamp(timestamp)

返回指定时间戳对应的时间(datetime.datetime对象实例)

datetime.timedelta()

返回一个时间间隔对象,可以直接与datetime.datetime对象做加减操作

实例

>>> import datetime

>>> 

>>> datetime.timedelta(365).total_seconds() # 一年包含的总秒数

31536000.0

>>> dt = datetime.datetime.now()

>>> dt + datetime.timedelta(3) # 3天后

datetime.datetime(2017, 2, 8, 9, 39, 40, 102821)

>>> dt + datetime.timedelta(-3) # 3天前

datetime.datetime(2017, 2, 2, 9, 39, 40, 102821)

>>> dt + datetime.timedelta(hours=3) # 3小时后

datetime.datetime(2017, 2, 5, 12, 39, 40, 102821)

>>> dt + datetime.timedelta(hours=-3) # 3小时前

datetime.datetime(2017, 2, 5, 6, 39, 40, 102821)

>>> dt + datetime.timedelta(hours=3, seconds=30) # 3小时30秒后

datetime.datetime(2017, 2, 5, 12, 40, 10, 102821)

posted @ 2018-05-31 16:40  caya  阅读(141)  评论(0编辑  收藏  举报