python时间处理模块,详解python中处理时间的模块

我们知道,Python提供了三种时间函数,时间模块 time、基本时间日期模块 datetime 和日历模块 Calendar。

time模块

在time模块中,可以用三种表现形式来表示时间,分别是时间戳、格式化时间字符串和结构化时间:

时间戳,通过time.time()获得

> time.time()

1545027641.4434128

格式化时间字符串,通过类似于time.strftime("%Y-%m-%d %H:%M:%S")这样的表达式获得

> time.strftime("%Y-%m-%d %H:%M:%S")

'2018-12-17 14:22:49'

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

%a 本地星期名称的简写(如星期四为Thu)

%A 本地星期名称的全称(如星期四为Thursday)

%b 本地月份名称的简写(如八月份为agu)

%B 本地月份名称的全称(如八月份为august)

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

%d 一个月中的第几天(01 - 31)

%f 微秒(范围0.999999)

%H 一天中的第几个小时(24小时制,00 - 23)

%I 第几个小时(12小时制,0 - 11)

%j 一年中的第几天(001 - 366)

%m 月份(01 - 12)

%M 分钟数(00 - 59)

%p 本地am或者pm的标识符

%S 秒数(00 - 59)

%U 一年中的星期数。(00 - 53星期天是一个星期的开始。)第一个星期天之 前的所有天数都放在第0周。

%w 一个星期中的第几天(0 - 6,0是星期天)

%W 和%U基本相同,不同的是%W以星期一为一个星期的开始。

%x 本地相应的日期表示

%X 本地相应的时间表示

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

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

%z 与UTC时间的间隔(如果是本地时间,返回空字符串)

%Z 时区的名字(如果是本地时间,返回空字符串)

%% %本身

结构化时间,或者叫时间元祖,通过time.localtime()获得,返回一个时间元祖

>>> time.localtime()

time.struct_time(tm_year=2018, tm_mon=12, tm_mday=17, tm_hour=14, tm_min=36, tm_

sec=24, tm_wday=0, tm_yday=351, tm_isdst=0)

其中

tm_year(年) 2018

tm_mon(月) 1 到 12

tm_mday(日) 1 到 31

tm_hour(时) 0 到 23

tm_min(分) 0 到 59

tm_sec(秒) 0 到 61 (60或61 是闰秒)

tm_wday(weekday) 0到6 (0是周一)

tm_yday(一年的第几天) 1 到 366

tm_isdst(是否是夏令时) -1, 0, 1, -1是决定是否为夏令时的标志

关于time模块的一些基本使用方法:

time.sleep(t) 其中参数 t 指推迟执行的秒数

time.time() 返回当前时间的时间戳

import time

def f():

time.sleep(3)

t1 = time.time()

f()

t2 = time.time()

print(t2-t1)

#3.001171588897705

time.localtime([ sec ]) 格式化时间戳为本地的时间。 如果sec参数未输入,则以当前时间为转换标准。

time.gmtime([ sec ]) 格式化时间戳为格林威治标转时间。 如果sec参数未输入,则以当前时间为转换标准。

time.strftime(format[, t]) 其中参数format表示格式化字符串,可选参数是一个struct_time对象

time.strptime(string[,format]) 是time.strftime()方法的逆向操作

>>> time.strftime("%Y-%m-%d %H:%M:%S")

'2018-12-17 15:17:17'

>>> time.strftime("%Y-%m-%d %H:%M:%S", time.gmtime())

'2018-12-17 07:17:42'

>>> time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(1545030000))

'2018-12-17 15:00:00'

time.strptime('2018-12-17', '%Y-%m-%d')

time.struct_time(tm_year=2018, tm_mon=12, tm_mday=17, tm_hour=0, tm_min

0, tm_sec=0, tm_wday=0, tm_yday=351, tm_isdst=-1)

time.asctime([t]) 接受时间元组并返回一个可读的形式为"Tue Dec 11 18:07:14 2018"的字符串,其中 t — 9个元素的元组或者通过函数 gmtime() 或 localtime() 返回的时间值。没有传参则默认为time.localtime()。

>>> time.asctime()

'Mon Dec 17 15:20:51 2018'

>>> time.asctime(time.localtime())

'Mon Dec 17 15:21:03 2018'

>>> time.asctime(time.localtime(1545030000))

'Mon Dec 17 15:00:00 2018'

>>> time.asctime(time.gmtime())

'Mon Dec 17 07:21:36 2018'

>>> time.asctime((2018, 12, 17, 15, 0, 0, 0, 351, 0))

'Mon Dec 17 15:00:00 2018'

time.ctime([ sec ]) 把一个时间戳(按秒计算的浮点数)转化为time.asctime()的形式。 如果参数未给或者为None的时候,将会默认time.time()为参数。它的作用相当于 asctime(localtime(secs))。没有返回值。

>>> time.ctime()

'Mon Dec 17 15:29:33 2018'

>>> time.ctime(1545030000)

'Mon Dec 17 15:00:00 2018'

time.clock() 用以浮点数计算的秒数返回当前的CPU时间。用来衡量不同程序的耗时。这个需要注意,在不同的系统上含义不同。在UNIX系统上,它返回的是"进程时间",它是用秒表示的浮点数(时间戳)。而在WINDOWS中,第一次调用,返回的是进程运行的实际时间。而第二次之后的调用是自第一次调用以后到现在的运行时间。

import time

def procedure():

time.sleep(3)

t = time.clock()

procedure()

print (time.clock() - t, "seconds process time")

#2.999830285124656 seconds process time

time.mktime(t) 执行与gmtime(), localtime()相反的操作,它接收struct_time对象作为参数,返回用秒数来表示时间的浮点数。如果输入的值不是一个合法的时间,将触发 OverflowError 或 ValueError。其中 t — 结构化的时间或者完整的9位元组元素。

time.mktime(time.localtime())

1545033603.0

time.mktime((2018, 12, 17, 16, 0, 0, 0, 351, 0))

1545033600.0

datatime模块

datatime模块重新封装了time模块,提供更多接口,提供的类有:time,date,datetime,timedelta,tzinfo。

time类

time类表示时间值,属性有hour minute second microsecond tzinfo

>>> import datetime

>>> t = datetime.time(11, 12, 13)

>>> print(t)

11:12:13

>>> print(t.hour)

11

>>> print(t.minute)

12

>>> print(t.second)

13

>>> print(t.microsecond)

0

>>> print(t.tzinfo)

None

date类

日期值用date 类表示。实例具有属性year,month和 day。

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

>>> print(today)

2018-12-17

>>> today.year

2018

>>> today.month

12

>>> today.day

17

>>> t = today.timetuple()

>>> print(t)

time.struct_time(tm_year=2018, tm_mon=12, tm_mday=17, tm_hour=0, tm_min=0, tm_se

c=0, tm_wday=0, tm_yday=351, tm_isdst=-1)

>>> d1 = datetime.date(2018,10,1)

>>> print(d1)

2018-10-01

>>> d2 = d1.replace(month=11)

>>> print(d2)

2018-11-01

timedelta类

用于时间的加减

>>> print(datetime.timedelta(microseconds=1))

0:00:00.000001

>>> print(datetime.timedelta(milliseconds=1))

0:00:00.001000

>>> print(datetime.timedelta(seconds=1))

0:00:01

>>> print(datetime.timedelta(minutes=1))

0:01:00

>>> print(datetime.timedelta(hours=1))

1:00:00

>>> print(datetime.timedelta(days=1))

1 day, 0:00:00

>>> print(datetime.timedelta(weeks=1))

7 days, 0:00:00

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

>>> print(today)

2018-12-17

>>> one_day = datetime.timedelta(days=1)

>>> print(one_day)

1 day, 0:00:00

>>> yesterday = today - one_day

>>> print(yesterday)

2018-12-16

>>> tomorrow = today + one_day

>>> print(tomorrow)

2018-12-18

>>> print(tomorrow - yesterday)

2 days, 0:00:00

>>> print(yesterday - tomorrow)

-2 days, 0:00:00

datetime类

datetime相当于date和time结合起来。其属性有year, month, day, hour , minute , second , microsecond , tzinfo

>>> today = datetime.datetime.today()

>>> print(today)

2018-12-17 21:43:12.993074

>>> t = today.strftime("%a %b %d %H:%M:%S %Y")

>>> print(t)

Mon Dec 17 21:43:12 2018

tzinfo类

tzinfo类表示时区,但由于是抽象类,不能直接实现

calendar

calendar模块有很广泛的方法用来处理年历和月历

>>> import calendar

>>> cal = calendar.month(2018, 12)

>>> print(cal)

December 2018

Mo Tu We Th Fr Sa Su

1 2

3 4 5 6 7 8 9

10 11 12 13 14 15 16

17 18 19 20 21 22 23

24 25 26 27 28 29 30

31

基本方法:

#设置每周以周三开始算

>>> calendar.setfirstweekday(2)

#判断是否是闰年

>>> print(calendar.isleap(2018))

False

#返回某月的第一天是星期几和这个月的天数

>>> print(calendar.monthrange(2018, 12))

(5, 31)

#返回某月每一周的列表集合

>>> print(calendar.monthcalendar(2018, 12))

[[0, 0, 0, 1, 2, 3, 4], [5, 6, 7, 8, 9, 10, 11], [12, 13, 14, 15, 16, 17, 18], [

19, 20, 21, 22, 23, 24, 25], [26, 27, 28, 29, 30, 31, 0]]

>>> calendar.setfirstweekday(0)

>>> print(calendar.monthcalendar(2018, 12))

[[0, 0, 0, 0, 0, 1, 2], [3, 4, 5, 6, 7, 8, 9], [10, 11, 12, 13, 14, 15, 16], [17

, 18, 19, 20, 21, 22, 23], [24, 25, 26, 27, 28, 29, 30], [31, 0, 0, 0, 0, 0, 0]]

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值