zoukankan      html  css  js  c++  java
  • python标准库time 和datetime

    1.time模块

    1.1 time模块简介

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

    • 时间戳(timestamp):通常来说,时间戳表示的是从1970年1月1日00:00:00开始按秒计算的偏移量。我们运行“type(time.time())”,返回的是float类型的时间戳。
    • 格式化的时间字符串(Format String)
    • 结构化的时间(struct_time):struct_time元组共有9个元素共九个元素:(年,月,日,时,分,秒,一年中第几周,一年中第几天,夏令时)

    如下所示:

    import time
    #-------当前时间为准的三种形式的时间
    print(time.time()) # 时间戳:1631616128.24815
    print(time.strftime("%Y-%m-%d %X")) #格式化的时间字符串:'2021-09-14 18:42:08'
    print(time.localtime()) #本地时区的struct_time对象:time.struct_time(tm_year=2021, tm_mon=9, tm_mday=14, tm_hour=18, tm_min=42, tm_sec=8, tm_wday=1, tm_yday=257, tm_isdst=0)
    print(time.gmtime())    #UTC时区的struct_time对象:time.struct_time(tm_year=2021, tm_mon=9, tm_mday=14, tm_hour=10, tm_min=42, tm_sec=8, tm_wday=1, tm_yday=257, tm_isdst=0)

     1.2 time模块常用函数

    import time
    #1.time.time() → float
    #返回时间戳。以浮点数表示的从 epoch 开始的秒数的时间值。
    print(time.time())#输出:1631689353.428093
    
    #2.time.gmtime([secs])
    #将以自 epoch 开始的秒数表示的时间转换为 UTC 的 struct_time ,其中 dst 标志始终为零。
    # 如果未提供 secs 或为 None ,则使用 time() 所返回的当前时间。 一秒以内的小数将被忽略。
    print(time.gmtime())#输出time.struct_time(tm_year=2021, tm_mon=9, tm_mday=15, tm_hour=6, tm_min=40, tm_sec=59, tm_wday=2, tm_yday=258, tm_isdst=0)
    print(time.gmtime(1631689353.428093))#将时间戳转换为struct_time对象
    
    #3.time.localtime([secs])
    #与 gmtime() 相似但转换为当地时间。如果未提供 secs 或为 None ,则使用由 time() 返回的当前时间。当 DST 适用于给定时间时,dst标志设置为 1 。
    print(time.localtime())#输出:time.struct_time(tm_year=2021, tm_mon=9, tm_mday=15, tm_hour=14, tm_min=42, tm_sec=8, tm_wday=2, tm_yday=258, tm_isdst=0)
    print(time.localtime(1631689353.428093))#将时间戳转换为struct_time对象
    
    #4.time.asctime([t])
    # 转换由 gmtime() 或 localtime() 所返回的表示时间的元组或 struct_time 为以下形式的字符串: 'Sun Jun 20 23:21:05 1993'。
    #日期字段的长度为两个字符,如果日期只有一个数字则会以零填充,例如: 'Wed Jun  9 04:26:40 1993'。
    #如果未提供 t,则会使用 localtime() 所返回的当前时间。
    print(time.asctime())#输出:Wed Sep 15 14:32:48 2021
    
    #5.time.ctime([secs])
    #转换以距离初始纪元的秒数表示的时间为以下形式的字符串: 'Sun Jun 20 23:21:05 1993' 代表本地时间。
    # 日期字段的长度为两个字符,如果日期只有一个数字则会以零填充,例如: 'Wed Jun  9 04:26:40 1993'。
    #如果 secs 未提供或为 None,则使用 time() 所返回的当前时间。 ctime(secs) 等价于 asctime(localtime(secs))。
    print(time.ctime())#输出:Wed Sep 15 14:38:50 2021
    
    #6.time.mktime(t)
    #这是 localtime() 的反函数。它的参数是 struct_time 或者完整的 9 元组(因为需要 dst 标志;如果它是未知的则使用 -1 作为dst标志),它表示 local 的时间,而不是 UTC 。
    # 它返回一个浮点数,以便与 time() 兼容。如果输入值不能表示为有效时间,则 OverflowError 或 ValueError 将被引发(这取决于Python或底层C库是否捕获到无效值)。它可以生成时间的最早日期取决于平台。
    print(time.mktime(time.localtime()))#将struct_time表示的时间转换为时间戳表示的时间:1631688229.0
    
    #7.time.sleep(secs)
    #调用该方法的线程将被暂停执行 secs 秒。参数可以是浮点数,以表示更为精确的睡眠时长。
    
    
    #8.time.strftime(format[, t])
    #转换一个元组或 struct_time 表示的由 gmtime() 或 localtime() 返回的时间到由 format 参数指定的字符串。如果未提供 t ,则使用由 localtime() 返回的当前时间。
    # format 必须是一个字符串。如果 t 中的任何字段超出允许范围,则引发 ValueError 。
    #以下指令可以嵌入 format 字符串中。它们显示时没有可选的字段宽度和精度规范,并被 strftime() 结果中的指示字符替换:
    
    #指令       意义                                                       注释
    
    #%a        本地化的缩写星期中每日的名称。
    #%A        本地化的星期中每日的完整名称。
    #%b        本地化的月缩写名称。
    #%B        本地化的月完整名称。
    #%c        本地化的适当日期和时间表示。
    #%d        十进制数 [01,31] 表示的月中日。
    #%H        十进制数 [00,23] 表示的小时(24小时制)。
    #%I        十进制数 [01,12] 表示的小时(12小时制)。
    #%j        十进制数 [001,366] 表示的年中日。
    #%m        十进制数 [01,12] 表示的月。
    #%M        十进制数 [00,59] 表示的分钟。
    #%p        本地化的 AM 或 PM 。                                         (1)
    #%S        十进制数 [00,61] 表示的秒。                                   (2)
    #%U        十进制数 [00,53] 表示的一年中的周数(星期日作为一周的第一天)。在第一个星期日之前的新年中的所有日子都被认为是在第 0 周。(3)
    #%w        十进制数 [0(星期日),6] 表示的周中日。
    #%W        十进制数 [00,53] 表示的一年中的周数(星期一作为一周的第一天)。 在第一个星期一之前的新年中的所有日子被认为是在第 0 周。(3)
    #%x        本地化的适当日期表示。
    #%X        本地化的适当时间表示。
    #%y        十进制数 [00,99] 表示的没有世纪的年份。
    #%Y        十进制数表示的带世纪的年份。
    #%z        时区偏移以格式 +HHMM 或 -HHMM 形式的 UTC/GMT 的正或负时差指示,其中H表示十进制小时数字,M表示小数分钟数字 [-23:59, +23:59] 。
    #%Z        时区名称(如果不存在时区,则不包含字符)。
    #%%        字面的 '%' 字符。
    
    #注释:
    
    #1.当与strptime() 函数一起使用时,如果使用 %I 指令来解析小时, %p 指令只影响输出小时字段。
    #2.范围真的是 0 到 61 ;值 60 在表示 leap seconds 的时间戳中有效,并且由于历史原因支持值 61 。
    #3.当与 strptime() 函数一起使用时, %U 和 %W 仅用于指定星期几和年份的计算。
    
    print(time.strftime('%Y-%m-%d %X'))#2021-09-15 15:15:14
    print(time.strftime('%Y-%m-%d %w %H:%M:%S',time.localtime()))#2021-09-15 3 15:17:22
    
    #9.time.strptime(string[, format])
    #根据格式解析表示时间的字符串。 返回值为一个被 gmtime() 或 localtime() 返回的 struct_time 。
    #format 参数使用与 strftime() 相同的指令。 它默认为匹配 ctime() 所返回的格式 "%a %b %d %H:%M:%S %Y"` 。
    # 如果 string 不能根据 format 来解析,或者解析后它有多余的数据,则会引发 ValueError。
    # 当无法推断出更准确的值时,用于填充任何缺失数据的默认值是 (1900, 1, 1, 0, 0, 0, 0, 1, -1) 。 string 和 format 都必须为字符串。
    
    print(time.strptime('2021-09-15 3 15:15:14','%Y-%m-%d %w %H:%M:%S'))#time.struct_time(tm_year=2021, tm_mon=9, tm_mday=15, tm_hour=15, tm_min=15, tm_sec=14, tm_wday=2, tm_yday=258, tm_isdst=-1)
    View Code

     1.3 三种时间表示之间的转换方式

     

    2.datetime模块

    2.1 datetime 模块的date对象

    date对象代表一个理想化的简单型日期,它假设当今的公历在过去和未来永远有效。 属性: year, month, and day。

    date对象的常用方法如下:

    #1. date.today()返回表示当前的本地日期的date对象
    today = datetime.date.today()
    
    #2. 自己传参数实例化date对象
    d = datetime.date(2021,9,14)
    
    print(today.__dir__())
    #['__repr__', '__hash__', '__str__', '__getattribute__', '__lt__', '__le__', '__eq__', '__ne__', '__gt__',
    # '__ge__', '__add__', '__radd__', '__sub__', '__rsub__', '__new__', 'fromtimestamp', 'fromordinal', 'today',
    # 'ctime', 'strftime', '__format__', 'timetuple', 'isocalendar', 'isoformat', 'isoweekday', 'toordinal', 'weekday',
    # 'replace', '__reduce__', 'year', 'month', 'day', '__doc__', 'min', 'max', 'resolution', '__setattr__', '__delattr__',
    # '__init__', '__reduce_ex__', '__subclasshook__', '__init_subclass__', '__sizeof__', '__dir__', '__class__']
    
    print(today.day,today.month,today.year)#15 9 2021
    
    #3. date.fromtimestamp(timestamp)返回对应于 POSIX 时间戳的当地时间,例如 time.time() 返回的就是时间戳。
    print(today.fromtimestamp(1631611105.0))#2021-09-14
    
    #4. date.timetuple()返回一个 time.struct_time,即 time.localtime() 所返回的类型。
    print(today.timetuple())#time.struct_time(tm_year=2021, tm_mon=9, tm_mday=15, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=2, tm_yday=258, tm_isdst=-1)
    
    #5. date.weekday()返回一个整数代表星期几,星期一为0,星期天为6。
    print(today.weekday())#2
    
    #6. date.isoweekday()返回一个整数代表星期几,星期一为1,星期天为7。
    print(today.isoweekday())#3
    
    #7. date.isocalendar()返回一个由三部分组成的 named tuple 对象: year, week 和 weekday。
    print(today.isocalendar())#(2021, 37, 3)
    
    #8. date.isoformat()返回一个以 ISO 8601 格式 YYYY-MM-DD 来表示日期的字符串:
    print(today.isoformat())#2021-09-15
    
    #9 date.ctime()返回一个表示日期的字符串:
    print(today.ctime())#"Wed Sep 15 00:00:00 2021"
    
    #10 date.strftime(format)#返回一个由显式格式字符串所指明的代表日期的字符串。
    print(today.strftime('%Y/%m/%d'))#2021/09/15
    View Code

     2.2 datetime 模块的datetime对象

    datetime 对象是包含来自 date 对象和 time 对象的所有信息的单一对象。与 date 对象一样,datetime 假定当前的格列高利历向前后两个方向无限延伸;与 time 对象一样,datetime 假定每一天恰好有 3600*24 秒。

    import datetime
    #一、datetime类 包含的常用类方法
    
    #1. datetime.today()返回表示当前地方时的 datetime 对象,其中 tzinfo 为 None。等价于:datetime.fromtimestamp(time.time())
    today = datetime.datetime.today()
    print(today.__dir__())
    
    #['__repr__', '__hash__', '__str__', '__getattribute__', '__lt__', '__le__', '__eq__', '__ne__', '__gt__', '__ge__',
    # '__add__', '__radd__', '__sub__', '__rsub__', '__new__', 'now', 'utcnow', 'fromtimestamp', 'utcfromtimestamp',
    # 'strptime', 'combine', 'date', 'time', 'timetz', 'ctime', 'timetuple', 'timestamp', 'utctimetuple', 'isoformat',
    #  'utcoffset', 'tzname', 'dst', 'replace', 'astimezone', '__reduce_ex__', '__reduce__', 'hour', 'minute', 'second',
    #  'microsecond', 'tzinfo', 'fold', '__doc__', 'min', 'max', 'resolution', 'fromordinal', 'today', 'strftime', '__format__',
    # 'isocalendar', 'isoweekday', 'toordinal', 'weekday', 'year', 'month', 'day', '__setattr__', '__delattr__', '__init__',
    #  '__subclasshook__', '__init_subclass__', '__sizeof__', '__dir__', '__class__']
    
    #2. datetime.now(tz=None) 返回表示当前地方时的 date 和 time 对象
    #如果可选参数 tz 为 None 或未指定,这就类似于 today(),但该方法会在可能的情况下提供比通过 time.time() 时间戳所获时间值更高的精度(例如,在提供了 C gettimeofday() 函数的平台上就可以做到这一点)。
    #如果 tz 不为 None,它必须是 tzinfo 子类的一个实例,并且当前日期和时间将被转换到 tz 时区。
    d = datetime.datetime.now()
    print(d.__dir__())
    # ['__repr__', '__hash__', '__str__', '__getattribute__', '__lt__', '__le__', '__eq__', '__ne__', '__gt__', '__ge__',
    #  '__add__', '__radd__', '__sub__', '__rsub__', '__new__', 'now', 'utcnow', 'fromtimestamp', 'utcfromtimestamp', 'strptime',
    #  'combine', 'date', 'time', 'timetz', 'ctime', 'timetuple', 'timestamp', 'utctimetuple', 'isoformat', 'utcoffset', 'tzname',
    #  'dst', 'replace', 'astimezone', '__reduce_ex__', '__reduce__', 'hour', 'minute', 'second', 'microsecond', 'tzinfo', 'fold',
    #  '__doc__', 'min', 'max', 'resolution', 'fromordinal', 'today', 'strftime', '__format__', 'isocalendar', 'isoweekday',
    #  'toordinal', 'weekday', 'year', 'month', 'day', '__setattr__', '__delattr__', '__init__', '__subclasshook__', '__init_subclass__',
    #  '__sizeof__', '__dir__', '__class__']
    
    #3. datetime.utcnow()返回表示当前 UTC 时间的 date 和 time,其中 tzinfo 为 None。
    #这类似于 now(),但返回的是当前 UTC 日期和时间,类型为简单型 datetime 对象。 感知型的当前 UTC 日期时间可通过调用 datetime.now(timezone.utc) 来获得。
    
    d = datetime.datetime.utcnow()
    print(d.__dir__())#输出同上
    
    #4. datetime.fromtimestamp(timestamp, tz=None)返回对应于 POSIX 时间戳例如 time.time() 的返回值的本地日期和时间。 如果可选参数 tz 为 None 或未指定,时间戳会被转换为所在平台的本地日期和时间,返回的 datetime 对象将为天真型。
    #如果 tz 不为 None,它必须是 tzinfo 子类的一个实例,并且时间戳将被转换到 tz 指定的时区。
    
    #5.datetime.utcfromtimestamp(timestamp)返回对应于 POSIX 时间戳的 UTC datetime,其中 tzinfo 值为 None。(结果为简单型对象。)
    #在 POSIX 兼容的平台上,它等价于以下表达式:datetime(1970, 1, 1, tzinfo=timezone.utc) + timedelta(seconds=timestamp)
    
    #6.datetime.combine(date, time, tzinfo=self.tzinfo)返回一个新的 datetime 对象,对象的日期部分等于给定的 date 对象的值,而其时间部分等于给定的 time 对象的值。 如果提供了 tzinfo 参数,
    # 其值会被用来设置结果的 tzinfo 属性,否则将使用 time 参数的 tzinfo 属性。
    #对于任意 datetime 对象 d,d == datetime.combine(d.date(), d.time(), d.tzinfo)。 如果 date 是一个 datetime 对象,它的时间部分和 tzinfo 属性会被忽略。
    
    
    #二、datetime类包含的常用类属性
    #datetime.min、datetime.max、datetime.resolution、datetime.year、datetime.month、datetime.day、datetime.hour、datetime.minute、datetime.second
    #datetime.microsecond、datetime.tzinfo
    
    
    #三、datetime类包含的常用实例方法
    
    #1.datetime.date() 返回具有同样 year, month 和 day 值的 date 对象。
    today = datetime.datetime.today()
    print(today.date())#2021-09-17
    
    #2.datetime.time() 返回具有同样 hour, minute, second, microsecond 和 fold 值的 time 对象。 tzinfo 值为 None。
    today = datetime.datetime.today()
    print(today.time())#14:51:28.209801
    
    #3.datetime.timetz()返回具有同样 hour, minute, second, microsecond, fold 和 tzinfo 属性性的 time 对象。
    
    #4.datetime.astimezone(tz=None)
    #返回一个具有新的 tzinfo 属性 tz 的 datetime 对象,并会调整日期和时间数据使得结果对应的 UTC 时间与 self 相同,但为 tz 时区的本地时间。
    
    #5.datetime.tzname()
    #如果 tzinfo 为 None,则返回 None,否则返回 self.tzinfo.tzname(self),如果后者不返回 None 或者一个字符串对象则将引发异常。
    
    #6.datetime.timetuple()
    #返回一个 time.struct_time,即 time.localtime() 所返回的类型。
    
    #7.datetime.timestamp()
    #返回对应于 datetime 实例的 POSIX 时间戳。 此返回值是与 time.time() 返回值类似的 float 对象。
    
    #8.datetime.ctime()返回一个表示日期和时间的字符串
    from datetime import datetime
    print(datetime(2002, 12, 4, 20, 30, 40).ctime())#Wed Dec  4 20:30:40 2002
    View Code
    from datetime import datetime,date,time,timezone
    #1.Using datetime.combine()
    >>> d = date(2005,7,14)
    >>> t = time(12,30)
    >>> datetime.combine(d,t)
    datetime.datetime(2005, 7, 14, 12, 30)
    
    #2.Using datetime.now()
    >>> datetime.now()
    datetime.datetime(2021, 9, 17, 15, 14, 28, 733398)
    >>> datetime.now(timezone.utc)
    datetime.datetime(2021, 9, 17, 7, 15, 16, 676705, tzinfo=datetime.timezone.utc)
    
    #3.Using datetime.strptime()>>> dt = datetime.strptime("21/11/06 16:30","%d/%m/%y %H:%M")
    >>> dt
    datetime.datetime(2006, 11, 21, 16, 30)
    
    #4.Using datetime.timetuple() to get tuple of all attributes
    dt = datetime.strptime("21/11/06 16:30", "%d/%m/%y %H:%M")
    tt = dt.timetuple()
    for item in tt:
        print(item)
      #5.date in ISO format
    >>> ic = dt.isocalendar()
    >>> for it in ic:
    ... print(it)
    ...
    2006
    47
    2
    
    #6. Formatting a datetime
    >>> dt.strftime("%A, %d. %B %Y %I:%M%p")
    'Tuesday, 21. November 2006 04:30PM'
    示例

    >>>待续

  • 相关阅读:
    linux操作系统及内核
    2.1.1Remove Duplicates from Sorted Arr
    顺序表
    开博篇
    ssh无法root用户登录与登录界面无法选择用户登录
    Ubuntu 18.04 Server安装GUI桌面
    Linux 命令 su 和 sudo 区别
    坑(二十六)—— mysql出现ERROR1698(28000):Access denied for user root@localhost错误解决方法
    redhat安装wps
    gitlab重置root密码
  • 原文地址:https://www.cnblogs.com/wuxunyan/p/15269082.html
Copyright © 2011-2022 走看看