Python标准库之time和datetime

注:博客转载自:https://www.cnblogs.com/zhangxinqi/p/7687862.html1、python3日期和时间Python程序能用很多方式处理日期和时间,转换日期

大家好,又见面了,我是全栈君,今天给大家准备了Idea注册码。

  注:博客转载自:https://www.cnblogs.com/zhangxinqi/p/7687862.html

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 2017
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.calendar(2017)
#返回一个多行字符串格式的year年年历,3个月一行,间隔距离为c。
每日宽度间隔为w字符。
每行长度为21* W+18+2* C。l是每星期行数。
>>> c = calendar.calendar(2017)
>>> print(c)
                                  2017

      January                   February                   March
Mo 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 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 31

       April                      May                       June
Mo 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 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 30

        July                     August                  September
Mo 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 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
31

      October                   November                  December
Mo 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 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))
    October 2017
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.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()
>>> 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')
复制代码

2、datetime模块

>>> from datetime import datetime
>>> print(datetime.now())
2017-10-23 14:30:48.971017
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/120061.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 屏幕尺寸、分辨率、像素密度及其三者之间的关系[通俗易懂]

    屏幕尺寸、分辨率、像素密度及其三者之间的关系[通俗易懂]屏幕尺寸屏幕对角线的长度单位英寸,1英寸等于2.54厘米分辨率横纵向方向像素的大小纵向像素*横向像素,如1920px*1080px单位像素(px)像素密度指每英寸屏幕所拥有的像素的数量单位dpi三者关系像素密度=Sqrt(横向像素*横向像素+纵向像素*纵向像素)/屏幕尺寸注意:像素大小并不是固定的,不同的设备像素的大小可能不相同

    2022年5月30日
    60
  • c#Parallel.ForEach控制线程数量

    c#Parallel.ForEach控制线程数量List<int>listI=newList<int>();for(inti=0;i<1000;i++){listI.Add(i);}ParallelOptionsoptions=newParallelOptions();option..

    2022年7月19日
    15
  • 补码运算溢出判断方法是_一个8位二进制整数采用补码表示

    补码运算溢出判断方法是_一个8位二进制整数采用补码表示溢出判断方法一  用Xf和Yf表示被加数和加数补码的符号位,Zf为补码和的符号位。当出现Xf=Yf=0两数同为正,而Zf为负,即Zf=1时,有上溢。当出现Xf=Yf=1两数同为负,而Zf为正,即Zf=0时,有下溢。溢出判断方法二  当数值最高位有进位位C1=1,符号位没有进位C0=0时,或当数值最高位没有进位位C1=0,符号位有进位C0=1时,结果有溢出。溢出判断方法

    2022年9月22日
    3
  • navicat for mysq15l激活码(注册激活)

    (navicat for mysq15l激活码)好多小伙伴总是说激活码老是失效,太麻烦,关注/收藏全栈君太难教程,2021永久激活的方法等着你。IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.net/100143.htmlEC87GSLRKZ-eyJsaWNlbnNlSWQi…

    2022年3月28日
    51
  • 探讨PMI测量配置对5G下行速率的影响

    探讨PMI测量配置对5G下行速率的影响问题描述 当前 5GPMI 测量配置均为 8P4B 那么什么是 8P4B 另外为什么功能开启后能提升下行速率 问题分析 首先简单回答 8P4B 是一组下行参考信号 CSI RS UE 测量 CSI RS 信号用于给基站反馈下行 CQI PMI RI CRI 等信息 当基站读到信息后会给 UE 分配最合适的 MCS TBSize RB 资源等调度相关的参数 从而使 UE 的下载性能达到最佳 一 8PP 是 port 的缩写 就是 8 个端口 这里的端口是逻辑天线端口 下图是按照目前中兴推荐配置后的一个 RB 内的 8 个端口

    2025年9月4日
    5
  • python爬虫-爬取网站图片。

    python爬虫-爬取网站图片。

    2021年9月17日
    47

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号