博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[转]python3之日期和时间
阅读量:6239 次
发布时间:2019-06-22

本文共 9290 字,大约阅读时间需要 30 分钟。

1、python3日期和时间

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

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

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

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

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

>>> import time>>> 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()

>>> import time>>> print(time.asctime(time.localtime(time.time())))Wed Oct 18 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 当前时区的名称
  • %% %号本身
>>> import time>>> 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模块有很广泛的方法用来处理年历和月历

>>> import calendar>>> cal=calendar.month(2017,10)>>> print(cal)    October 2017Mo Tu We Th Fr Sa Su                   1 2  3  4  5  6  7  8 9 10 11 12 13 14 1516 17 18 19 20 21 2223 24 25 26 27 28 2930 31#calendar.calendar(2017)#返回一个多行字符串格式的year年年历,3个月一行,间隔距离为c。每日宽度间隔为w字符。每行长度为21* W+18+2* C。l是每星期行数。>>> c = calendar.calendar(2017)>>> print(c)                                  2017      January                   February                   MarchMo Tu We Th Fr Sa Su      Mo Tu We Th Fr Sa Su      Mo Tu We Th Fr Sa Su                   1             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 1916 17 18 19 20 21 22      20 21 22 23 24 25 26      20 21 22 23 24 25 2623 24 25 26 27 28 29      27 28                     27 28 29 30 3130 31       April                      May                       JuneMo Tu We Th Fr Sa Su      Mo Tu We Th Fr Sa Su      Mo Tu We Th Fr Sa Su                1  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 1110 11 12 13 14 15 16      15 16 17 18 19 20 21      12 13 14 15 16 17 1817 18 19 20 21 22 23      22 23 24 25 26 27 28      19 20 21 22 23 24 2524 25 26 27 28 29 30      29 30 31                  26 27 28 29 30        July                     August                  SeptemberMo Tu We Th Fr Sa Su      Mo Tu We Th Fr Sa Su      Mo Tu We Th Fr Sa Su                1  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 1010 11 12 13 14 15 16      14 15 16 17 18 19 20      11 12 13 14 15 16 1717 18 19 20 21 22 23      21 22 23 24 25 26 27      18 19 20 21 22 23 2424 25 26 27 28 29 30      28 29 30 31               25 26 27 28 29 3031      October                   November                  DecemberMo Tu We Th Fr Sa Su      Mo Tu We Th Fr Sa Su      Mo Tu We Th Fr Sa Su                   1             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 1716 17 18 19 20 21 22      20 21 22 23 24 25 26      18 19 20 21 22 23 2423 24 25 26 27 28 29      27 28 29 30               25 26 27 28 29 30 3130 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))    October 2017Mo Tu We Th Fr Sa Su                   1 2  3  4  5  6  7  8 9 10 11 12 13 14 1516 17 18 19 20 21 2223 24 25 26 27 28 2930 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#返回格林威治西部的夏令时地区的偏移秒数。如果该地区在格林威治东部会返回负值(如西欧,包括英国)。对夏令时启用地区才能使用。>>> import time>>> 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 Oct 19 15:07:31 2017#time.clock()#用以浮点数计算的秒数返回当前的CPU时间。用来衡量不同程序的耗时,比time.time()更有用。>>> import time>>> def procedure():...   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()>>> import time>>> print(time.ctime())Thu Oct 19 19:24:24 2017>>> print(time.asctime(time.localtime()))Fri Oct 20 11:10:00 2017>>> print(time.asctime())Fri Oct 20 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()>>> xtime.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 import datetime>>> print(datetime.now())2017-10-23 14:30:48.971017

 

 
 
 
标签:
 
 
+加关注
2
0
 
 
 
上一篇:
下一篇:

转载于:https://www.cnblogs.com/langqi250/p/10141329.html

你可能感兴趣的文章
JVM基础和调优(一)
查看>>
ICommand in Silverlight
查看>>
复选框、单选按钮、下拉列表的定义
查看>>
webdynpro的select_option示例
查看>>
img src 使用 base64 图片数据
查看>>
MapReduce计算每年最高温度
查看>>
Ruby快速入门
查看>>
UVA 12118 Inspector's Dilemma(连通性,欧拉路径,构造)
查看>>
一台电脑同时运行多个tomcat配置方法
查看>>
让文本框只能输入数字
查看>>
pwnable.kr 之 passcode write up
查看>>
多任务之协程浅谈
查看>>
Qt Creator快捷键
查看>>
idea中lombok的使用
查看>>
网站集成支付宝在线支付
查看>>
mac下安装appium
查看>>
js ---- 函数防抖
查看>>
js call 和 apply
查看>>
CentOS 6.5下Percona Xtrabackup的安装错误解决方案
查看>>
VCS双机+oracle 11gR2+ASM主机名修改
查看>>