0%

23、time与datetime.md

一、概要

python中的time,datetime提供了简单和复杂的方式操作日期和时间的类。虽然支持日期和时间算法,但我们的学习的重点是获取日期和时间,用于输出格式和操作

datetime模块定义了以下几个类:

类名称 描述
datetime.datetime 表示日期时间
datetime.date 表示日期,常用的属性有:year, month和day
datetime.time 表示时间,常用属性有:hour, minute, second, microsecond
datetime.timedelta 表示两个date、time、datetime实例之间的时间间隔,
datetime.tzinfo 时区相关信息对象的抽象基类。它们由datetime和time类使用,
datetime.timezone Python 3.2中新增的功能,实现tzinfo抽象基类的类,表示与UTC的固定偏移量

time官方文档

datetime官方文档

二、time

1、说明

time类表示时间,由时、分、秒以及微秒组成,

在Python中,通常有这几种方式来表示时间:

  • 时间戳(相对于1970.1.1 00:00:00以秒计算的偏移量,时间戳是惟一的,如:1382678303.098)
  • 时间元组(struct_time)共九个元素。例如time.struct_time(tm_year=2019, tm_mon=3, tm_mday=11, tm_hour=17, tm_min=3, tm_sec=20, tm_wday=0, tm_yday=70, tm_isdst=0)
  • 格式化的时间字符串(重点)

注意:由于Python的time模块实现主要调用C库,所以各个平台可能有所不同

2、时间戳

  1. 说明

  2. 获取时间戳

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

3、时间元组

  1. 说明

    用一个元组装起来的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
  2. 获取时间元组

    1
    2
    print(time.localtime())
    # time.struct_time(tm_year=2019, tm_mon=3, tm_mday=17, tm_hour=21, tm_min=42, tm_sec=33, tm_wday=6, tm_yday=76, tm_isdst=0)
  3. 时间戳转化成时间元组

    1
    2
    3
    4
    # localtime的函数
    struct = time.localtime(time.time())
    print(struct)
    # time.struct_time(tm_year=2019, tm_mon=3, tm_mday=17, tm_hour=20, tm_min=14, tm_sec=47, tm_wday=6, tm_yday=76, tm_isdst=0)

  4. 将时间元组转化成时间戳 mktime()

    1
    2
    3
    4
    import time
    tup_time = time.localtime()
    time2 = time.mktime(tup_time)
    print(time2)

4、格式化的时间(重点)

  1. 说明

    获取可读的时间格式

  2. 将时间戳转化成可读性的时间asctime()

    1
    2
    3
    4
    import time
    print(time.asctime(time.localtime(time.time())))
    # 星期,月, 日, 时间, 年
    # Mon Nov 16 23:17:57 2020
  3. 将时间戳转化成指定格式的字符串

    1
    2
    3
    time.strftime(format[, t])
    # format 格式
    # t 时间

    格式化符号

    符号 说明
    %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)
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    import time
    # 获取完整的年月日时分秒
    time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time()))
    # 获取年-月-日
    print(time.strftime('%Y-%m-%d',time.localtime()))
    print(time.strftime('%Y',time.localtime())) #获取完整年份
    print(time.strftime('%y',time.localtime())) #获取简写年份
    print(time.strftime('%m',time.localtime())) #获取月
    print(time.strftime('%d',time.localtime())) #获取日
    print(time.strftime('%H',time.localtime())) #获取时,24小时制
    print(time.strftime('%I',time.localtime())) #获取时,12小时制
    print(time.strftime('%M',time.localtime())) #获取分
    print(time.strftime('%S',time.localtime())) #获取秒
    print(time.strftime('%H:%M:%S',time.localtime())) #获取时:分:秒
  4. 将指定字符串转化成时间戳

    1
    2
    3
    4
    5
    6
    7
    import time
    t = "2019-3-15 18:30:00"
    #将其转换为时间元组
    time_struct = time.strptime(t, "%Y-%m-%d %H:%M:%S")
    # 转换为时间戳:
    stamp = int(time.mktime(time_struct))
    print(stamp)

5、延迟执行

  1. 说明

    数推迟调用线程的运行,可通过参数secs指秒数,表示进程挂起的时间

  2. 示例代码

    1
    2
    # 延迟5秒执行
    time.sleep(5)

img

三、date

1、说明

表示年、月、日的日期对象,需要导入datetime模块

属性 取值范围 说明
year datetime.MINYEAR <= year <= datetime.MAXYEAR 超出范围报错
month 1 <= month <= 12 超出范围报错
day 1 <= day <= 给定年月的天数 超出范围报错

2、常用的方法

2.1、today

  1. 说明

    静态方法、返回当前的日期

  2. 语法格式

    1
    date.today()
  3. 返回值

    返回一个date类型

  4. 示例代码

    1
    2
    3
    4
    5
    6
    7
    import datetime
    today = datetime.date.today()
    print(today)
    print(type(today))
    # 等价于 datetime.date.fromtimestamp(time.time())
    today = datetime.date.fromtimestamp(time.time())
    print(today)

2.2、其它

  1. 说明

    获取年,获取月,获取日

  2. 示例代码

    1
    2
    3
    4
    today = datetime.date.today()
    print(today.year)
    print(today.month)
    print(today.day)

四、datetime

  1. 说明

    datetime从字面意思上看是datetime

  2. 创建日期操作

    1
    2
    # 语法
    # datetime.datetime(year,month,day,hour,minute,second,microsecond,)
  3. 常见操作

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    # 获取当前系统的年与日时分秒微秒
    print(datetime.datetime.today())
    # 获取当前系统的年与日时分秒微秒
    print(datetime.datetime.now())
    # 通过时间戳转化成日期对象
    print(datetime.datetime.fromtimestamp(time.time()))
    # 获取 当前的时间
    print(datetime.datetime.now().time())
    # 获取当前的日期
    print(datetime.datetime.now().date())

    print(type(datetime.datetime.strptime('2019-03-21', '%Y-%m-%d')))