(STM32)datetime库完整地介绍库应用知识

  前言

  datetime库也用于时间日期的处理,主要用于完成日期和时间的解析,格式化和算术运算。本篇,将完整地介绍datetime库的应用知识。

  datetime.date

  与time库一样,datetime库也有获取当前日期的类,日历日期值用datetime.date表示。比如datetime.date.today()。

  具体代码如下:

   import datetime

    today = datetime.date.today()
    print(today)
    now = today.timetuple()
    print("年:", now.tm_year)
    print("月:", now.tm_mon)
    print("日:", now.tm_mday)
    print("时:", now.tm_hour)
    print("分:", now.tm_min)
    print("秒:", now.tm_sec)
    print("星期:", now.tm_wday)

  运行之后,效果如下:

  js 时间转字符串 date2string_js 时间转字符串 date2string_js keycode转字符

  datetime.date.today()获取的是当前的日期,并不包含时间数据。而timetuple()函数返回的是time库中常用的time.struct_time结构体,这样你就可以像使用struct_time结构体一样,获取单一的时间数据,不过因为datetime.date.today()只有日期,所以时间数据为0。

  当然,这只是简单的应用。其实通过datetime.date.today()获取的对象,还有其他方法供大家使用。下面,博主分别列出所有方法:

  方法名

  参数

  意义

  toordinal()

  无参数

  返回日期的多边格里高利度序数,其中1年1月1日具有序数1。如果1年1月1日具有序数1,则1年1月2日将具有序数2,依此类推。

  fromordinal()

  1个整型参数

  返回多边格里高利度序数对应的日期datetime.date对象

  ctime()

  无参数

  获取当前日期完整数据,与time.ctime()类似,只是时间是00:00:00

  weekday()

  无参数

  获取星期几,[0-6]

  replace()

  3个整型参数:年,月,日

  将数字日期转换为datetime.date对象时间

  fromisocalendar()

  3个整型参数:提供年、该年第几个星期、该星期几日,

  返回一个datetime.date对象时间

  fromisoformat()

  1个字符串日期参数(字符串格式必须为YYYY-mm-dd)

  将字符串转换为datetime.date对象时间

  fromtimestamp()

  1个float时间参数(比如time.time())

  返回时间戳格式的日期字符串,timestamp为时间戳

  isoformat()

  无参数

  返回格式 YYYY-MM-DD 来表示日期的字符串,这是 date.fromisoformat() 的逆操作。

  isocalendar()

  无参数

  返回年,该年的第几周以及周几,返回值元组类型

  isoweekday()

  无参数

  返回星期几(这个是1-7)

  today()

  无参数

  返回今天的日期

  strftime()

  格式字符串参数(比如%Y:%m:%d)

  将datetime.date对象时间转换为指定的字符串格式

  测试代码如下:

   import datetime

    import time
    today = datetime.date.today()
    #返回日期的多边格里高利度序数,其中1年1月1日具有序数1。如果1年1月1日具有序数1,则1年1月2日将具有序数2,依此类推。
    print(today.toordinal())
    #返回多边格里高利度序数对应的日期datetime.date对象
    print(today.fromordinal(1))
    #获取当前日期完整数据,与time.ctime()类似,只是时间是00:00:00
    print(today.ctime())
    #获取星期几,[0-6]
    print(today.weekday())
    #将数字日期转换为datetime.date对象时间
    print(today.replace(2020, 10, 10))
    #提供年、该年第几个星期、该星期几日,返回一个datetime.date对象时间
    print(today.fromisocalendar(2020, 20, 6))
    #将字符串转换为datetime.date对象时间,字符串格式必须为YYYY-mm-dd
    print(today.fromisoformat("2020-10-10"))
    #返回时间戳格式的日期字符串,timestamp为时间戳
    print(today.fromtimestamp(time.time()))
    #返回格式 YYYY-MM-DD 来表示日期的字符串,这是 date.fromisoformat() 的逆操作。
    print(today.isoformat())
    #返回年,该年的第几周以及周几,返回值元组类型
    print(today.isocalendar())
    #返回星期几(这个是1-7)
    print(today.isoweekday())
    #返回今天的日期
    print(today.today())
    #输出年月日
    print(today.year, today.month, today.day)
    #输入最小日期与最大日期
    print(today.min, today.max)
    #将datetime.date对象时间转换为指定的字符串格式

  运行之后,效果如下:

  js keycode转字符_js 时间转字符串 date2string_js 时间转字符串 date2string

  datetime.time

  datetime.time模块:包含时间的访问和转换功能。详细的用法如下:

  方法名

  js keycode转字符_js 时间转字符串 date2string_js 时间转字符串 date2string

  参数

  意义

  replace()

  3个整型参数:时,分,秒

  替换时间值,返回datetime.time时间

  strftime()

  1个格式化时间字符串参数(比如%H:%M:%S)

  输出指定格式时间的字符串

  fromisoformat()

  1个字符串时间参数

  返回对应字符串datetime.time对象

  isoformat()

  可选参数

  默认返回时间字符串;指定时间具体值,返回指定时间字符串(比如timespec='hours')返回小时字符串数

  测试代码如下:

   import datetime

    t = datetime.time(19, 20, 20)
    # 获取时间的最大值与最小值
    print(t.min, t.max)
    # 获取当前输入时间的时,分,秒数据
    print(t.hour, t.minute, t.second, t.microsecond, t.tzinfo)
    # 时间分辨率,datetime.time被限制为整微妙值
    print(t.resolution)
    # 替换时间值,返回datetime.time时间
    print(t.replace(15, 30, 30))
    # 输出指定格式时间的字符串
    print(t.strftime("%H-%M-%S"))
    # 返回对应字符串datetime.time对象
    print(t.fromisoformat("11:11:11"))
    # 返回指定时间字符串

  运行之后,效果如下:

  js 时间转字符串 date2string_js 时间转字符串 date2string_js keycode转字符

  datetime.timedelta

  在time库中,支持时间的运算。而datetime库也给我们提供了日期的运算。其中,计算过去或者将来的时间会用到datetime.timedelta类。datetime.timedelta的内部值按日,秒,微秒存储。

  构造函数

  首先,我们来看看其构造函数的详细定义:

   def __new__(cls, days=0, seconds=0, microseconds=0,

  可以看出来,datetime.timedelta的构造方法,就是用来构造天,时,分,秒的。简单的说,它就是计算中的参数,比如要计算减去一天后的日期,就要创建一个一天长度的datetime.timedelta对象。

  日期运算

  既然了解了datetime.timedelta就是一个中间参数。下面,我们来进行日期的加减法运算,具体代码如下:

   import datetime

    today = datetime.date.today()
    print("今天日期:", today)
    one_day = datetime.timedelta(days=1)
    yesterday = today - one_day
    tomorrow = today + one_day
    print("昨天日期", yesterday)
    print("明天日期", tomorrow)
    print("昨天与明天相差{0}天", (yesterday - tomorrow).days)

  运行之后,效果如下:

  js 时间转字符串 date2string_js keycode转字符_js 时间转字符串 date2string

  比较日期

  在实际的应用中,我们除了会计算日期相差的时间之外,我们还可能会比较两个日期的大小。话不多说,我们直接代码学习:

   import datetime

    # 日期比较
    d1 = datetime.date.today()
    d2 = d1 + datetime.timedelta(days=1)
    print(d1 > d2)
    # 时间比较
    t1 = datetime.time(19, 20, 20)
    t2 = datetime.time(18, 20, 20)

  运行之后,效果如下:

  js 时间转字符串 date2string_js keycode转字符_js 时间转字符串 date2string

  计算秒数

  在我们没有完全掌握datetime库之前,我们会怎么计算秒数?

  当然是直接计算,比如1小时的秒数计算,我们会乘以3600。其他时间依次类推。但其实datetime.timedelta有一个非常简单的直接秒数转换函数:total_seconds()。

  详细使用方式如下:

   import datetime

    timeD = datetime.timedelta(days=1)

  这里,我们计算了一天的秒数,效果如下:

  js 时间转字符串 date2string_js keycode转字符_js 时间转字符串 date2string

  datetime.datetime

  其实,datetime库下面还有一个datetime类js 时间转字符串 date2string,该类可以存储由日期和时间分量构成的值。与前面的datetime.date与datetime.time有本质的区别,datetime.datetime是前面两者的结合,即有日期也有时间。

  我们先来获取一下,我们常用的时间数值:

   import datetime

    print("当前时间:",datetime.datetime.now())
    print("当前时间:",datetime.datetime.today())
    print("UTC时间:",datetime.datetime.utcnow())
    date_str = ["year", "month", "day", "hour", "minute", "second", "microsecond", ]
    now = datetime.datetime.now()
    for attr in date_str:

  这里,我们通过反射获取到了时间的各个值。控制台输出如下:

  js 时间转字符串 date2string_js 时间转字符串 date2string_js keycode转字符

  combine()

  既然datetime库提供了单独的时间以及单独的日期类,那么肯定有函数能将日期与时间进行组合。没错,datetime.daetime.combine()函数就能实现日期与时间的组合。具体代码如下:

   import datetime

    t = datetime.time(19, 20, 20)
    d = datetime.date.today()
    td = datetime.datetime.combine(d, t)

  运行之后,时间与日期就组合成功。

  js 时间转字符串 date2string_js 时间转字符串 date2string_js keycode转字符

  至于其他常用的函数,如下表所示:

  方法名

  参数

  意义

  fromisocalendar()

  提供3个参数:年,第几星期,第几天

  js 时间转字符串 date2string_js keycode转字符_js 时间转字符串 date2string

  返回指定的日期时间(因为没提供时间所以时间为00:00:00)

  isoformat()

  1个datetime.datetime参数

  返回ISO格式的日期UTC字符串

  utcfromtimestamp()

  1个time.time()类型的参数

  返回UTC日期时间

  utctimetuple()

  1个datetime.datetime参数

  返回struct_time结构体时间

  timestamp()

  1个datetime.datetime参数

  返回datetime的时间戳

  fromisoformat()

  1个日期时间字符串

  返回datetime.daetime对象时间

  ctime()

  1个datetime.datetime参数

  返回英文格式的时间字符串

  time()

  1个datetime.datetime参数

  返回指定日期的时间

  isoweekday()

  1个datetime.date参数

  返回星期几[1-7]

  strftime()

  2个参数js 时间转字符串 date2string,一个datetime.datetime参数,一个格式字符串

  转换为指定格式的日期时间格式

  strptime()

  js 时间转字符串 date2string_js 时间转字符串 date2string_js keycode转字符

  2个参数,一个日期时间字符串,一个日期时间格式

  将格式化的字符串转换为datatime.datetime实例

  isocalendar()

  1个datetime.date参数

  返回一个 3 元组 (ISO 年份, ISO 周序号, ISO 周日期)。

  toordinal()

  1个datetime.date参数

  返回日期的多边格里高利度序数,其中1年1月1日具有序数1。如果1年1月1日具有序数1,则1年1月2日将具有序数2,依此类推。

  fromordinal()

  1个整型数字

  返回多边格里高利度序数对应的日期datetime.datetime对象

  weekday()

  1个datetime.date参数

  返回星期几,[0-6]

  date()

  1个datetime.datetime参数

  返回日期值

  timetz()

  1个datetime.datetime参数

  此方法的返回类型是具有相同时,分,秒,微秒,倍数和tzinfo的时间对象。

  测试代码如下:

   import datetime

    import time
    #返回日期值
    print(datetime.datetime.date(datetime.datetime.now()))
    #返回星期几,[0-6]
    print(datetime.datetime.weekday(datetime.date.today()))
    #返回日期的多边格里高利度序数,其中1年1月1日具有序数1。如果1年1月1日具有序数1,则1年1月2日将具有序数2,依此类推。
    print(datetime.datetime.toordinal(datetime.date.today()))
    #返回多边格里高利度序数对应的日期datetime.datetime对象
    print(datetime.datetime.fromordinal(123))
    #返回一个 3 元组 (ISO 年份, ISO 周序号, ISO 周日期)。
    print(datetime.datetime.isocalendar(datetime.date.today()))
    #将格式化的字符串转换为datatime.datetime实例
    print(datetime.datetime.strptime("Mon Apr 12 14:13:S 2021", "%a %b %d %H:%M:S %Y"))
    # 转换为指定格式的日期时间格式
    print(datetime.datetime.strftime(datetime.datetime.now(), "%a %b %d %H:%M:S %Y"))
    # 返回星期几,值为[1-7]
    print(datetime.datetime.isoweekday(datetime.date.today()))
    # 返回当前时间
    print(datetime.datetime.time(datetime.datetime.now()))
    # 返回英文格式的时间字符串
    print(datetime.datetime.ctime(datetime.datetime.now()))
    # 返回ISO格式的日期UTC字符串
    print(datetime.datetime.isoformat(datetime.datetime.now()))
    # 返回指定的日期时间(因为没提供时间所以时间为00:00:00)
    print(datetime.datetime.fromisocalendar(2020, 6, 6))
    # 返回datetime.daetime对象时间
    print(datetime.datetime.fromisoformat("2020-01-01 13:00:00"))
    # 返回struct_time结构体时间
    print(datetime.datetime.utctimetuple(datetime.datetime.now()))
    # 返回UTC日期时间
    print(datetime.datetime.utcfromtimestamp(time.time()))
    # 返回datetime的时间戳

  运行之后,效果如下:

  js 时间转字符串 date2string_js 时间转字符串 date2string_js keycode转字符

  astimezone(时区)

  在datetime.datetime中,时区是由tzinfo的子类表示。由于tzinfo是一个抽象类,实际使用时,应该需要定义它的子类,并为一些方法提供适当的实现。

  具体使用方法如下:

   import datetime

    one = datetime.timezone(datetime.timedelta(hours=-6))
    two = datetime.timezone(datetime.timedelta(hours=6))
    d = datetime.datetime.now(one)
    print(d)
    print(d.astimezone(datetime.timezone.utc))
    print(d.astimezone(two))

  运行之后,效果如下:

  js 时间转字符串 date2string_js 时间转字符串 date2string_js keycode转字符

  这里不同的时区,就是通过加减时间决定的。而控制台输出的+-后面的值,都是相对于UTC而言。daetime库的讲解到这里就全部讲解完成了,相信只要认真看完本篇,对于日期,时间的操作,想必手到擒来。

文章由官网发布,如若转载,请注明出处:https://www.veimoz.com/1862
0 评论
352

发表评论

!