python3日期时间运算_[转]python3之日期和时间

转自:https://www.cnblogs.com/zhangxinqi/p/7687862.html#_label6

阅读目录

1、python3日期和时间

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

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

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

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

Python 的 time 模块下有很多函数可以转换常见日期格式。如函数time.time()用于获取当前时间戳

>>> importtime>>> print(time.time())1508312234.7298932

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

2、时间元组

很多Python函数用一个元组装起来的9组数字处理时间

字段

属性

4位年数

tm_year

2017

tm_mon

1到12

tm_mday

1到31

小时

tm_hour

0到23

分钟

tm_min

0到59

tm_sec

0到61(60或61是润秒)

一周的第几日

tm_wday

0到6(0是周一)

一年的第几日

tm_yday

1到366,一年中的第几天

夏令时

tm_isdst

是否为夏令时,值为1时是夏令时,值为0时不是夏令时,默认为-1

#从返回浮点数的时间辍方式向时间元组转换,只要将浮点数传递给如localtime之类的函数

>>> print(time.localtime(time.time()))

time.struct_time(tm_year=2017, tm_mon=10, tm_mday=18, tm_hour=15, tm_min=40, tm_sec=59, tm_wday=2, tm_yday=291, tm_isdst=0)

#当前时间为:2017年,10月,18日,15时,40分,59秒,星期三,一年中的291天,不是夏令

3、获取格式化的时间

可以根据需求选取各种格式,但是最简单的获取可读的时间模式的函数是asctime()

>>> importtime>>> print(time.asctime(time.localtime(time.time())))

Wed Oct18 16:03:24 2017

#wed为星期三,oct为october十月的缩写,18日,时间,年

4、格式化日期

可以使用 time 模块的 strftime 方法来格式化日期

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 当前时区的名称

%% %号本身

>>> importtime>>> print(time.strftime('%Y',time.localtime())) #获取完整年份

2017

>>> print(time.strftime('%y',time.localtime())) #获取简写年份

17

>>> print(time.strftime('%m',time.localtime())) #获取月

10

>>> print(time.strftime('%d',time.localtime())) #获取日

18

>>> print(time.strftime('%Y-%m-%d',time.localtime())) #获取年-月-日

2017-10-18

>>> print(time.strftime('%H',time.localtime())) #获取时,24小时制

16

>>> print(time.strftime('%l',time.localtime())) #获取时,12小时制

4

>>> print(time.strftime('%M',time.localtime())) #获取分

33

>>> print(time.strftime('%S',time.localtime())) #获取秒

31

>>> print(time.strftime('%H:%M:%S',time.localtime())) #获取时:分:秒

16:34:28

>>> print(time.strftime('%a',time.localtime())) #本地简化星期

Wed>>> print(time.strftime('%A',time.localtime())) #本地完整星期

Wednesday>>> print(time.strftime('%b',time.localtime())) #本地简化月份

Oct>>> print(time.strftime('%B',time.localtime())) #本地完整月份

October>>> print(time.strftime('%c',time.localtime())) #本地日期和时间表示

Wed Oct 18 16:37:46 2017

>>> print(time.strftime('%j',time.localtime())) #一年中的第几天

291

>>> print(time.strftime('%p',time.localtime())) #P.M等价符

PM>>> print(time.strftime('%U',time.localtime())) #一年中的第几个星期,星期天为星期的开始

42

>>> print(time.strftime('%w',time.localtime())) #星期几,星期天为星期的开始

3

>>> print(time.strftime('%W',time.localtime())) #一年中的第几个星期,星期一为星期的开始

42

>>> print(time.strftime('%x',time.localtime())) #本地日期表示

10/18/17

>>> print(time.strftime('%X',time.localtime())) #本地时间表示

17:16:17

>>> print(time.strftime('%Z',time.localtime())) #当前时区

CST>>> print(time.strftime('%%',time.localtime())) #输出%本身

%

>>> print(time.strftime('%Y-%m-%d %H:%M:%S %w-%Z',time.localtime()))2017-10-18 17:25:39 3-CST #完整日期,时间,星期,时区

5、获取月日历

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

>>> importcalendar>>> cal=calendar.month(2017,10)>>> print(cal)

October2017Mo Tu We Th Fr Sa Su1

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.calendar(2017)#返回一个多行字符串格式的year年年历,3个月一行,间隔距离为c。

每日宽度间隔为w字符。

每行长度为21* W+18+2*C。l是每星期行数。>>> c = calendar.calendar(2017)>>> print(c)2017January February March

Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su1 1 2 3 4 5 1 2 3 4 5

2 3 4 5 6 7 8 6 7 8 9 10 11 12 6 7 8 9 10 11 12

9 10 11 12 13 14 15 13 14 15 16 17 18 19 13 14 15 16 17 18 19

16 17 18 19 20 21 22 20 21 22 23 24 25 26 20 21 22 23 24 25 26

23 24 25 26 27 28 29 27 28 27 28 29 30 31

30 31April May June

Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su1 2 1 2 3 4 5 6 7 1 2 3 4

3 4 5 6 7 8 9 8 9 10 11 12 13 14 5 6 7 8 9 10 11

10 11 12 13 14 15 16 15 16 17 18 19 20 21 12 13 14 15 16 17 18

17 18 19 20 21 22 23 22 23 24 25 26 27 28 19 20 21 22 23 24 25

24 25 26 27 28 29 30 29 30 31 26 27 28 29 30July August September

Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su1 2 1 2 3 4 5 6 1 2 3

3 4 5 6 7 8 9 7 8 9 10 11 12 13 4 5 6 7 8 9 10

10 11 12 13 14 15 16 14 15 16 17 18 19 20 11 12 13 14 15 16 17

17 18 19 20 21 22 23 21 22 23 24 25 26 27 18 19 20 21 22 23 24

24 25 26 27 28 29 30 28 29 30 31 25 26 27 28 29 30

31October November December

Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su1 1 2 3 4 5 1 2 3

2 3 4 5 6 7 8 6 7 8 9 10 11 12 4 5 6 7 8 9 10

9 10 11 12 13 14 15 13 14 15 16 17 18 19 11 12 13 14 15 16 17

16 17 18 19 20 21 22 20 21 22 23 24 25 26 18 19 20 21 22 23 24

23 24 25 26 27 28 29 27 28 29 30 25 26 27 28 29 30 31

30 31

#calendar.firstweekday返回当前每周起始日期的设置。默认情况下,首次载入calendar模块时返回0,即星期一。

>>>calendar.firstweekday()

0#calendar.setfirstweekday设置每周的起始日期码。0(星期一)到6(星期日)。

>>> calendar.setfirstweekday(1)>>>calendar.firstweekday()1

#calendar.isleap是闰年返回True,否则为false。

>>> calendar.isleap(2017)

False>>> print(calendar.isleap(2020))

True#calendar.leapdays返回在两年之间的闰年总数,但不包括末年

>>> print(calendar.leapdays(2016,2020))1

>>> print(calendar.leapdays(2016,2021))2

#calendar.monthcalendar返回一个整数的单层嵌套列表,每个子列表装载代表一个星期,月外的日期设为0

>>> print(calendar.monthcalendar(2017,10))

[[0, 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]]>>> print(calendar.month(2017,10))

October2017Mo Tu We Th Fr Sa Su1

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.monthrange返回两个整数,第一个为该月的首日的星期(0-6),第二个为该月的总天数

>>> print(calendar.monthrange(2017,10))

(6, 31)#calendar.timegm接受一个时间元组形式struct_time,返回该时刻的时间辍(1970纪元后经过的浮点秒数)

>>> print(calendar.timegm((2017,10,19,14,50,0,0,0,0)))1508424600

>>> print(calendar.timegm((2017,10,19,14,50,50,0,0,0)))1508424650

>>> print(time.localtime(time.time()))

time.struct_time(tm_year=2017, tm_mon=10, tm_mday=19, tm_hour=14, tm_min=49, tm_sec=44, tm_wday=3, tm_yday=292, tm_isdst=0)#calendar.weekday返回给定日期的星期码。0(星期一)到6(星期日)。月份为 1(一月) 到 12(12月)。

>>> print(calendar.weekday(2017,10,19))3

>>> print(calendar.weekday(2017,10,20))4

6、Time模块

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

#time.altzone#返回格林威治西部的夏令时地区的偏移秒数。如果该地区在格林威治东部会返回负值(如西欧,包括英国)。对夏令时启用地区才能使用。

>>> importtime>>> print(time.altzone)-28800

#time.asctime([tupletime])#接受时间元组并返回一个可读的形式为"Thu Oct 19 15:07:31 2017"(2017年10月19日 周四15时07分31秒)的24个字符的字符串。

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

Thu Oct19 15:07:31 2017

#time.clock()#用以浮点数计算的秒数返回当前的CPU时间。用来衡量不同程序的耗时,比time.time()更有用。

>>> importtime>>> defprocedure():

... time.sleep(2.5)

...>>> t0 =time.clock()>>>procedure()>>> print(time.clock() -t0)0.010000000000000009

>>> print(time.clock() -t0)0.020000000000000004

#time.ctime()作用相当于asctime(localtime(secs)),未给参数相当于asctime()

>>> importtime>>> print(time.ctime())

Thu Oct19 19:24:24 2017

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

Fri Oct20 11:10:00 2017

>>> print(time.asctime())

Fri Oct20 11:10:19 2017

#time.gmtime()以元组方式返回格林威治时间

>>> print(time.gmtime())

time.struct_time(tm_year=2017, tm_mon=10, tm_mday=20, tm_hour=3, tm_min=27, tm_sec=30, tm_wday=4, tm_yday=293, tm_isdst=0)#time.localtime()以元组方式返回本地当前时间

>>> print(time.localtime())

time.struct_time(tm_year=2017, tm_mon=10, tm_mday=20, tm_hour=11, tm_min=30, tm_sec=33, tm_wday=4, tm_yday=293, tm_isdst=0)#time.mktime()将元组时间转换为时间戳

>>> x =time.localtime()>>>x

time.struct_time(tm_year=2017, tm_mon=10, tm_mday=20, tm_hour=11, tm_min=32, tm_sec=8, tm_wday=4, tm_yday=293, tm_isdst=0)>>>time.mktime(x)1508470328.0

#time.strftime(fmt[,tupletime])#接收以时间元组,并返回以可读字符串表示的当地时间,格式由fmt决定。

>>> print(time.strftime('%Y-%m-%d %H:%M:%S',time.localtime()))2017-10-20 17:29:08

#time.strptime()#根据fmt的格式把一个时间字符串解析为时间元组。

>>> print(time.strptime('23 Oct 2017','%d %b %Y'))

time.struct_time(tm_year=2017, tm_mon=10, tm_mday=23, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=0, tm_yday=296, tm_isdst=-1)>>> print(time.strptime('23 Oct 2017 14 03 00','%d %b %Y %H %M %S'))

time.struct_time(tm_year=2017, tm_mon=10, tm_mday=23, tm_hour=14, tm_min=3, tm_sec=0, tm_wday=0, tm_yday=296, tm_isdst=-1)#time.time#返回当前时间的时间戳(1970年经过的秒数)

>>> print(time.time())1508739061.9443805

#time.timezone#是当地时区距离格林威治偏移的秒数

>>> print(time.timezone)-28800

#time.tzname#输出一个包含一个不包含夏令时的本地时区名称

>>> print(time.tzname)

('CST', 'CST')

7、datetime模块

>>> from datetime importdatetime>>> print(datetime.now())2017-10-23 14:30:48.971017

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值