5分钟掌握Python之时间计算的核心方法

前言

时间是所有的应用程序都必需处理的重要内容。在python中,推荐使用datetime和timedelta类来进行处理,因为这两个类以非常简单的方式提供了对时间和日期进行了相应的处理的强大功能。

1 引入对象

使用标准的语法:import datetime 即可引入。但请注意, datetime 是命名空间的名称,而这个命名空间下面有一个类,即我们要使用表示日期时间的类也叫 datetime。所以,我们在使用 datetime 类的时候,要写成 datetime.datetime。这样写起来很麻烦,为了更方便使用此类,可以使用 from datetime import datetime 引入 datetime 对象即可使用此类。

2 建立时间对象

from datetime import datetime
dt1 = datetime(2020, 2, 6) # 2020/02/06 00:00:00
dt2 = datetime(2020, 2, 6, 10, 26, 32) # 2020/02/06 10:26:32
dt3 = datetime.now() # 获得当前系统时间,精确到毫秒,也可以用 datetime.today()

3 时间计算

时间计算包括两个概念,一个是时间,另一个是时间差。前者使用datetime表示,后者在python中可以使用 timedelta 表示。timedelta 完全初始化格式为 timedelta(days, seconds, microseconds, milliseconds, minutes, hours, weeks) 参数分别是天数,秒数,毫秒数,微秒数,小时数和星期数(注:参数均为浮点型)。

from datetime import datetime, timedelta

# dt1和dt2是初始时间,delta1 是dt1和dt2的时间差, dt3 是 dt2+delta1 的新时间
dt1 = datetime(2000, 1, 1) # 2000/01/01
dt2 = datetime(2020, 2, 6, 10, 26, 32, 1234) # 2020/02/06 10:26:32.1234
delta1 = dt2 - dt1 # 7341 days, 10:26:32 
dt3 = dt2 + delta1 # 2040-03-13 20:53:04


# 输出日期和时间差
print(delta1) # 7341 days, 10:26:32
print(delta1.total_seconds()) # 634299992.001234
print('days', delta1.days) # days 7341
print('microseconds', delta1.microseconds) # microseconds 1234
print('resolution', delta1.resolution)# resolution 0:00:00.000001   
print('total seconds', delta1.total_seconds()) # total seconds 634299992.001234
print('max', delta1.max)  # max 999999999 days, 23:59:59.999999
print('min', delta1.min)  # min -999999999 days, 0:00:00
print('seconds', delta1.seconds)  # seconds 37592
print(dt3) # 2040-03-13 20:53:04

# 一些常规计算
dt4 = datetime.now() + timedelta(-1) # 一天前的时间
dt5 = datetime.now() + timedelta(0, 10) # 100秒后的时间
dt6 = datetime.now() + timedelta(weeks=1) # 1周后的时间 
dt6 = datetime.now() + timedelta(hours=-1.5) # 1.5小时前的时间

4 日期与字符串相互转换

日期与字符互相转换的操作也是非常常用的操作,我们可以使用 strptime进行操作。

  • 时间转字符串:dt1.strftime(format)
  • 字符串转时间:dt1 = strftime(dtstr, format)

其中,字符串主要使用以下内容

年:%Y 四位年份(000-9999%y 两位年份(00-99)
月:%m 两位月份(01-12)
日:%d 两位月内天数(0-31)
时:%H 两位24小时制小时数(0-23%I 两位12小时制小时数(01-12)
分:%M 两位分(00=59)
秒:%S 两位秒(00-59)
毫秒:%f 六位毫秒(000000 - 999999)
微秒:

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

主要可用类型

  • datetime.date
    表示日期。
    主要属性:年,月和日。
  • datetime.time
    一个理想的时间格式,独立于任何特定的一天,假设每天正好有24 * 60 * 60秒。
    主要属性:小时,分钟,秒,微秒和tzinfo。
  • datetime.datetime
    日期和时间的组合。
    主要属性:年,月,日,小时,分钟,秒,微秒和tzinfo。
  • datetime.timedelta
    表示两个日期,时间或日期时间实例与微秒分辨率之间的差异的持续时间。
  • datetime.tzinfo
    时区信息对象的抽象基类。 datetime和time类使用它们来提供可自定义的时间调整概念(例如,考虑时区和/或夏时制)。
  • datetime.timezone
    将tzinfo抽象基类实现为相对于UTC的固定偏移量的类。

参考资料

[1] Basic date and time types.

发布了326 篇原创文章 · 获赞 94 · 访问量 19万+

猜你喜欢

转载自blog.csdn.net/weixin_43145361/article/details/104192754
今日推荐