时间处理模块

前言

时间我们平常大部分都接触到,在生活上早上七点五十起床,七点五十就是时间;在开发中我们有时候对某些操作需要记录时间,新增操作时间字段,这又涉及到了时间。接下来我们简单对python的时间处理进行简单的总结。在工作中我们大部分用time或者datetime函数进行时间处理,今天我就总结这两模块外,再新增calendar,arrow这两位成员,好啦下面我们开始讲解。

time

time模块是涉及到时间功能中最常用的一个模块,在开发中我们使用很频繁的一个模块。

time

返回当前时间的时间戳(1970纪元后经过的浮点秒数)

 
  1. >>>import time

  2. >>>time.time()

  3. 1610867607.4679744

altzone

返回格林威治西部的夏令时地区的偏移秒数。如果该地区在格林威治东部会返回负值

 
  1. >>>import time

  2. >>>time.altzone

  3. -32400

localtime

格式化当前时间戳,返回元组格式,另外注意的是可以传入参数,则从1970开始计算时间

 
  1. >>>import time

  2. >>>time.localtime()

  3. time.struct_time(tm_year=2021, tm_mon=1, tm_mday=17, tm_hour=15, tm_min=16, tm_sec=30, tm_wday=6, tm_yday=17, tm_isdst=0)

  4. >>>

  5. >>>time.localtime(0)

  6. time.struct_time(tm_year=1970, tm_mon=1, tm_mday=1, tm_hour=8, tm_min=0, tm_sec=0, tm_wday=3, tm_yday=1, tm_isdst=0)

  7. >>>time.localtime(1)

  8. time.struct_time(tm_year=1970, tm_mon=1, tm_mday=1, tm_hour=8, tm_min=0, tm_sec=1, tm_wday=3, tm_yday=1, tm_isdst=0)

  9. >>>time.time()

  10. >>>1610868273.6466053

  11. >>>time.localtime(1610868273.6466053)

  12. time.struct_time(tm_year=2021, tm_mon=1, tm_mday=17, tm_hour=15, tm_min=24, tm_sec=33, tm_wday=6, tm_yday=17, tm_isdst=0)

  13.  

mktime

time mktime() 函数执行与gmtime(), localtime()相反的操作,它接收struct_time对象作为参数,返回用秒数来表示时间的浮点数

 
  1. >>>import time

  2. >>>time.mktime(time.localtime())

  3. 1610868588.0

gmtime

将格式化时间装换时间戳

 
  1. >>>import time

  2. >>>time.gmtime(time.time())

  3. time.struct_time(tm_year=2021, tm_mon=1, tm_mday=17, tm_hour=7, tm_min=29, tm_sec=17, tm_wday=6, tm_yday=17, tm_isdst=0)

asctime

接受时间元组并返回一个可读的形式字符串,可以通过localtime也可以自己定义

 
  1. >>>import time

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

  3. 'Sun Jan 17 15:33:29 2021'

  4. >>>

  5. >>>t = (2018,5,27,1,5,27,6,147,-1)

  6. >>>time.asctime(t)

  7. 'Sun May 27 01:05:27 2018'

ctime

把一个时间戳(按秒计算的浮点数)转化为time.asctime()的形式(可读的形式字符串),默认当前时间,也可以手动传入

 
  1. >>>import time

  2. >>>time.ctime()

  3. 'Sun Jan 17 15:38:09 2021'

  4. >>>time.ctime(time.time())

  5. 'Sun Jan 17 15:38:17 2021'

strftime

按照我们指定的格式将时间元组转化为字符串;如果不指定时间元组,默认是当前时间localtime()

时间格式如下

 
  1. >>>import time

  2. >>>time.strftime("%y-%m-%d")

  3. '21-01-17'

strptime

将字符串转化为时间元组(与strftime相反),需要传入参数:待转化的字符串, 时间字符串对应的格式(如上图所示)

 
  1. >>>import time

  2. >>>time.strptime(time.strftime("%y-%m-%d"),"%y-%m-%d")

  3. time.struct_time(tm_year=2021, tm_mon=1, tm_mday=17, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=6, tm_yday=17, tm_isdst=-1)

sleep

推迟调用线程的运行, 需要传入参数

 
  1. >>>import time

  2. >>>time.sleep(5)

datetime

date

日期对象(年月日)

1- 相关属性

 
  1. >>>datetime.date.today().year # 年

  2. 2021

  3. >>>datetime.date.today().month #月

  4. 1

  5. >>>datetime.date.today().day #日

  6. 17

  7. >>>datetime.date.today() #当天日期

  8. datetime.date(2021, 1, 17)

  9. >>>datetime.date.today().ctime() # 返回日期的字符串

  10. 'Sun Jan 17 00:00:00 2021'

  11. >>>datetime.date.today().weekday() # 星期几

  12. 6

  13. >>>datetime.date.today().toordinal() # 返回公历日期的序数

  14. 737807

  15. >>>datetime.date.today().isocalendar() # 返回一个元组:一年中的第几周,星期几

  16. (2021, 2, 7)

2- 时间转换

 
  1. >>>import datetime

  2. >>>datetime.date.today().toordinal() # 转换时间戳

  3. 737807

  4. >>>datetime.date.fromordinal(737807) # 转换时间

  5. datetime.date(2021, 1, 17)

  6. >>>datetime.date.fromtimestamp(time.time()) # 时间戳转时间

  7. datetime.date(2021, 1, 17)

  8. >>>datetime.date.today().strftime("%Y-%m-%d") # 转换具体格式

  9. '2021-01-17'

  10. >>>a = datetime.date(2020,1,1) # 修改日期

  11. >>>a.replace(2021,1,17)

  12. datetime.date(2021, 1, 17)

time

时间对象(时分秒)

 
  1. >>>import datetime

  2. >>>datetime.time(1,1,1).hour #时

  3. 1

  4. >>>datetime.time(1,1,1).minute #分

  5. 1

  6. >>>datetime.time(1,1,1).second # 秒

  7. 1

datetime

包含date类和time类,这个方法我们开发时候经常用

 
  1. from datetime import datetime, date, time

  2.  
  3. print("当天时间:", datetime.today())

  4. print("当天时间:",datetime.now())

  5. print("国际当前时间:",datetime.utcnow()) # 返回当前UTC日期和时间的datetime对象

  6. print("时间戳转时间",datetime.fromtimestamp(1610888455)) # 时间戳的datetime对象

  7. print(datetime.fromordinal(699000))

  8. print("拼接时间",datetime.combine(date(2021, 1, 17), time(22, 21, 51))) # 拼接日期和时间

  9. print(datetime.strptime("2020-12-25", "%Y-%m-%d"))

  10.  
  11.  
  12. d = datetime(2021,1,17,22,24,23)

  13. print("当前日期:", d.date())

  14. print("当前时间:", d.time())

  15. print("返回时间:", d.timetz()) # 从datetime中拆分出具体时区属性的time

  16. print("时间替换", d.replace(year=2021,month=1, day=18)) # 替换

  17. print(d.timetuple()) # 时间元组

  18. print(d.toordinal()) # 和date.toordinal一样

  19. print("第几周",d.weekday())

  20. print("星期", d.isoweekday())

  21. print(d.isocalendar()) # 返回那年,第几周, 周几

  22. print(d.isoformat())

  23. print(d.strftime("%Y-%m-%d :%H:%M:%S"))

  24.  
  25.  
  26. ############返回

  27. 当天时间: 2021-01-17 21:03:52.467134

  28. 当天时间: 2021-01-17 21:03:52.467601

  29. 国际当前时间: 2021-01-17 13:03:52.467601

  30. 时间戳转时间 2021-01-17 21:00:55

  31. 1914-10-19 00:00:00

  32. 拼接时间 2021-01-17 22:21:51

  33. 2020-12-25 00:00:00

  34. 当前日期: 2021-01-17

  35. 当前时间: 22:24:23

  36. 返回时间: 22:24:23

  37. 时间替换 2021-01-18 22:24:23

  38. time.struct_time(tm_year=2021, tm_mon=1, tm_mday=17, tm_hour=22, tm_min=24, tm_sec=23, tm_wday=6, tm_yday=17, tm_isdst=-1)

  39. 737807

  40. 第几周 6

  41. 星期 7

  42. (2021, 2, 7)

  43. 2021-01-17T22:24:23

  44. 2021-01-17 :22:24:23

timedelta

一个时间段,即两个日期date或者日期时间datetime之间的差;支持参数:weeks、days、hours、minutes、seconds、milliseconds、microseconds

 
  1. >>>from datetime import date, datetime, timedelta

  2. >>>td = datetime.today()

  3. >>>td

  4. datetime.datetime(2021, 1, 17, 21, 12, 1, 106864)

  5. >>>td +timedelta(hours=1) # 加一小时

  6. datetime.datetime(2021, 1, 17, 22, 12, 1, 106864)

  7. >>>td +timedelta(minutes=1) # 加一分

  8. datetime.datetime(2021, 1, 17, 21, 13, 1, 106864)

  9. >>>td +timedelta(weeks=1) # 加一周

  10. datetime.datetime(2021, 1, 24, 21, 12, 1, 106864)

  11. >>>datetime.now() - datetime(2021, 1,1,1,1,)

  12. datetime.timedelta(days=16, seconds=72789, microseconds=620600)

  13. >>>de = datetime.now() - datetime(2021, 1,1,1,1,) #时间差

  14. >>>de.days #差的天数

  15. 16

  16. >>>de.seconds #差的描述 指的是整天差的

  17. 72798

  18. >>>de.total_seconds() # 全部的秒数

  19. 1455198.618413

tzinfo

本地时间指的是我们系统本身设定时区的时间,例如中国处于北京时间,常说的东八区UTC+8:00

 
  1. from datetime import datetime, timezone, timedelta

  2. now_t = timezone(timedelta(hours=8)) #创建时区

  3. print("创建时区:" ,now_t )

  4. now = datetime.now()

  5. print("现在时间:", now)

  6. # 加8小时

  7. new = now.replace(tzinfo=timezone(timedelta(hours=8)))

  8. print(("加8小时时区:", new))

  9.  
  10.  
  11. now = datetime.utcnow().replace(tzinfo=timezone.utc) # 指定utc时区

  12. print(now)

  13. bj = now.astimezone(timezone(timedelta(hours=8))) # 通过astimezone切换到东八区

  14. print("bj:", bj)

  15.  
  16. tk = now.astimezone(timezone(timedelta(hours=9))) # UTC时区切换到东九区:东京时间

  17. print("tk:", tk)

  18.  
  19. tk_new = bj.astimezone(timezone(timedelta(hours=9))) # 北京时间(东八区)直接切换到东京时间(东九区)

  20.  
  21. print("tk_new:", tk_new)

  22.  
  23.  
  24.  

calendar

此模块的函数都是日历相关的,例如打印某月的字符月历

calendar

返回一个多行字符串格式的year年年历,3个月一行,间隔距离为c, 每日宽度间隔为w字符,l是每星期行数。

 
  1.  
  2. import calendar

  3. print(calendar.calendar(2021, w=2, l=1, c=6))

返回数据

 
  1. 2021

  2.  
  3. January February March

  4. Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su

  5. 1 2 3 1 2 3 4 5 6 7 1 2 3 4 5 6 7

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

  7. 11 12 13 14 15 16 17 15 16 17 18 19 20 21 15 16 17 18 19 20 21

  8. 18 19 20 21 22 23 24 22 23 24 25 26 27 28 22 23 24 25 26 27 28

  9. 25 26 27 28 29 30 31 29 30 31

  10.  
  11. April May June

  12. Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su

  13. 1 2 3 4 1 2 1 2 3 4 5 6

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

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

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

  17. 26 27 28 29 30 24 25 26 27 28 29 30 28 29 30

  18. 31

  19.  
  20. July August September

  21. Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su

  22. 1 2 3 4 1 1 2 3 4 5

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

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

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

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

  27. 30 31

  28.  
  29. October November December

  30. Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su

  31. 1 2 3 1 2 3 4 5 6 7 1 2 3 4 5

  32. 4 5 6 7 8 9 10 8 9 10 11 12 13 14 6 7 8 9 10 11 12

  33. 11 12 13 14 15 16 17 15 16 17 18 19 20 21 13 14 15 16 17 18 19

  34. 18 19 20 21 22 23 24 22 23 24 25 26 27 28 20 21 22 23 24 25 26

  35. 25 26 27 28 29 30 31 29 30 27 28 29 30 31

  36.  

firstweekday

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

 
  1. import calendar

  2.  
  3. print(calendar.firstweekday())

  4.  
  5. >>> 0

isleap

是闰年返回 True,否则为 False。

 
  1. import calendar

  2.  
  3. print(calendar.isleap(2000))

  4.  
  5. >>>True

leapdays(a,b)

返回在a,b两年之间的闰年总数。(左开右闭原则)

 
  1. import calendar

  2.  
  3. print(calendar.leapdays(2000,2021))

month

该函数返回的是year年的month月的日历,只有两行标题,一周一行。每日间隔宽度为w个字符,每行的长度为7*w + 6,其中l是每星期的行数

 
  1. import calendar

  2.  
  3. print(calendar.month(2021, 1, w=2, l=1))

 
  1. January 2021

  2. Mo Tu We Th Fr Sa Su

  3. 1 2 3

  4. 4 5 6 7 8 9 10

  5. 11 12 13 14 15 16 17

  6. 18 19 20 21 22 23 24

  7. 25 26 27 28 29 30 31

monthcalendar

返回一个整数的单层嵌套列表。每个子列表装载代表一个星期的整数。Year年month月外的日期都设为0;范围内的日子都由该月第几日表示,从1开始。

 
  1. import calendar

  2.  
  3. print(calendar.monthcalendar(2021,1))

  4.  
  5. >>>[[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]]

monthrange

该函数返回的结果是一个元组,元组中有两个数值(a,b), 数值a代表的是该月从星期几开始;规定6代表星期天,取值为0-6,数值b代表该月总共有多少天

 
  1. import calendar

  2.  
  3. print(calendar.monthrange(2021,1))

  4.  
  5. >>>(4, 31)

weekday

weekday方法是输入年月日,我们便可知道这天是星期几;返回值是0-6,0代表星期1,6代表星期天

 
  1. import calendar

  2.  
  3. print(calendar.weekday(2021,1,3))

  4.  
  5. >>>6

arrow

Arrow是一个Python库,为创建,操作,格式化和转换日期,时间和时间戳提供了一种明智的,人性化的方法

简单例子

 
  1. import arrow

  2. utc = arrow.utcnow() # 获取世界标准时间

  3. print("获取世界标准时间:",utc)

  4. now = arrow.now() # 获取本地时间

  5. print("获取本地时间:",now)

  6. print("获取指定时区的时间:",arrow.now('US/Pacific'))

  7.  
  8.  
  9. arw = arrow.now() # 实例化

  10. print("当前时间:", arw)

  11. print("当前年:", arw.year)

  12. print("当前月:", arw.month)

  13. print("当前天:", arw.day)

  14. print("当前时:", arw.hour)

  15. print("当前分:", arw.minute)

  16. print("当前秒:", arw.second)

  17. print("获取时间戳:", arw.timestamp)

  18. print("当前年:", arw.float_timestamp)

  19. print("浮点数时间戳:", arw.replace(hour=20,minute=00))

  20.  
  21.  

返回結果

 
  1. 当前时间: 2021-01-17T22:02:47.878933+08:00

  2. 当前年: 2021

  3. 当前月: 1

  4. 当前天: 17

  5. 当前时: 22

  6. 当前分: 2

  7. 当前秒: 47

  8. 获取时间戳: 1610892167

  9. 当前年: 1610892167.878933

  10. 浮点数时间戳: 2021-01-17T20:00:47.878933+08:00

  11.  
  12. 获取世界标准时间: 2021-01-17T13:56:41.079536+00:00

  13. 获取本地时间: 2021-01-17T21:56:41.079536+08:00

  14. 获取指定时区的时间: 2021-01-17T05:56:41.193846-08:00

时间迁移

 
  1. import arrow

  2. arw = arrow.now() # 实例化

  3. print("当前时间:", arw)

  4. print("往后偏移一年:", arw.shift(years=+1))

  5. print("往前偏移三天:", arw.shift(years=-1))

  6. print("往后偏移一月:", arw.shift(months=+1))

  7. print("往前偏移一月:", arw.shift(months=-1))

  8. print("往后偏移一周:", arw.shift(weeks=+1))

  9. print("往前偏移一周:", arw.shift(weeks=-1))

  10. print("往后偏移三天:", arw.shift(days=+3))

  11. print("往前偏移三天:", arw.shift(days=-3))

  12. print("往后偏移三分钟:", arw.shift(minutes=+3))

  13. print("往前偏移三分钟:", arw.shift(minutes=-3))

  14. print("往后偏移三秒:", arw.shift(seconds=+3))

  15. print("往前偏移三秒:", arw.shift(seconds=-3))

结果

 
  1. 当前时间: 2021-01-17T22:07:08.786150+08:00

  2. 往后偏移一年: 2022-01-17T22:07:08.786150+08:00

  3. 往前偏移三天: 2020-01-17T22:07:08.786150+08:00

  4. 往后偏移一月: 2021-02-17T22:07:08.786150+08:00

  5. 往前偏移一月: 2020-12-17T22:07:08.786150+08:00

  6. 往后偏移一周: 2021-01-24T22:07:08.786150+08:00

  7. 往前偏移一周: 2021-01-10T22:07:08.786150+08:00

  8. 往后偏移三天: 2021-01-20T22:07:08.786150+08:00

  9. 往前偏移三天: 2021-01-14T22:07:08.786150+08:00

  10. 往后偏移三分钟: 2021-01-17T22:10:08.786150+08:00

  11. 往前偏移三分钟: 2021-01-17T22:04:08.786150+08:00

  12. 往后偏移三秒: 2021-01-17T22:07:11.786150+08:00

  13. 往前偏移三秒: 2021-01-17T22:07:05.786150+08:00

时间格式化

 
  1. import arrow

  2. arw = arrow.now() # 实例化

  3. print("当前时间:", arw)

  4. print("无格式输出:", arw.format())

  5. print("有格式输出", arw.format('YYYY-MM-DD HH:mm:ss'))

  6. print("返回日期和时间的ctime格式化表示", arw.ctime())

  7. print("以整数形式返回星期几(0-6)", arw.weekday())

  8. print("以整数形式返回一周中的ISO日(1-7)", arw.isoweekday())

  9. print("返回3元组(ISO年,ISO周数,ISO工作日)", arw.isocalendar())

  10. print("返回日期的格雷戈里序数", arw.toordinal())

  11. print("直接生成Arrow对象:", arrow.Arrow(2017, 2, 1))

  12. print("字符串转换成Arrow对象:",arrow.get("2017-01-20 11:30", "YYYY-MM-DD HH:mm"))

  13. print("时间戳转arrow:", arrow.get(1485937858.659424))

 
  1. 当前时间: 2021-01-17T22:17:02.283292+08:00

  2. 无格式输出: 2021-01-17 22:17:02+08:00

  3. 有格式输出 2021-01-17 22:17:02

  4. 返回日期和时间的ctime格式化表示 Sun Jan 17 22:17:02 2021

  5. 以整数形式返回星期几(0-6) 6

  6. 以整数形式返回一周中的ISO日(1-7) 7

  7. 返回3元组(ISO年,ISO周数,ISO工作日) (2021, 2, 7)

  8. 返回日期的格雷戈里序数 737807

  9. 直接生成Arrow对象: 2017-02-01T00:00:00+00:00

  10. 字符串转换成Arrow对象: 2017-01-20T11:30:00+00:00

  11. 时间戳转arrow: 2017-02-01T08:30:58.659424+00:00

常用转换

时间戳转日期

time

 
  1. import time

  2. now_timestamp = time.time() # 获取当前时间的时间戳

  3.  
  4. # 时间戳先转成时间元组,strftime在转成指定格式

  5. now_tuple = time.localtime(now_timestamp)

  6. print(time.strftime("%Y-%m-%d %H:%M:%S", now_tuple))

datetime

 
  1. import datetime, time

  2. timeStamp = time.time()

  3.  
  4. date_now = datetime.datetime.fromtimestamp(timeStamp)

  5.  
  6. print(date_now.strftime("%Y-%m-%d %H:%M:%S"))

arrow

 
  1. import time, arrow

  2. timeStamp = time.time()

  3.  
  4. date_now = arrow.get(timeStamp)

  5.  
  6. print(date_now.format("YYYY-MM-DD HH:mm:ss"))

日期转时间戳

 
  1. import time

  2.  
  3. # 字符类型的时间

  4. tss1 = '2021-1-17 23:40:00'

  5. # 转为时间数组

  6. timeArray = time.strptime(tss1, "%Y-%m-%d %H:%M:%S")

  7.  
  8. # 转为时间戳

  9. timeStamp = int(time.mktime(timeArray))

  10. print ("时间戳:", timeStamp)

格式化时间

 
  1. import time

  2.  
  3. old = "2021-1-17 23:28:45"

  4.  
  5. # 1、转换成时间数组

  6. time_array = time.strptime(old, "%Y-%m-%d %H:%M:%S")

  7.  
  8. # 2、转换成新的时间格式(20201212-20:28:54)

  9. new = time.strftime("%Y--%m--%d %H:%M:%S",time_array) # 指定显示格式

  10.  
  11. print("原格式时间:",old)

  12. print("新格式时间:",new)

学习链接

arrow官方文档

date文档

菜鸟time

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值