• Python时间模块


    1 time 模块:

      读取系统时钟当前时间;

      在 time 模块中,time.time()和 time.sleep()函数是最有用的模块。

    1.1 time.time()

      time.time()函数返回自1970 年 1 月 1 日 0 点以来的秒数,是一个浮点值,这个数字称为 UNIX 纪元时间戳。

     

      In [2]: time.time()
    
      Out[2]: 1504746354.671471
    

     

    1.2 time.sleep()

    如果需要让程序暂停一下,就调用 time.sleep()函数,并传入希望程序暂停的秒数。

    In [5]: for i in range(3):
    
       ...:     print ('stop 2s')
    
       ...:     time.sleep(2)
    
       ...:     print ('stop 2s ok')
    
       ...:    
    
    stop 2s
    
    stop 2s ok
    
    stop 2s
    
    stop 2s ok
    
    stop 2s
    
    stop 2s ok
    
    为了让这些浮点值更易于处理,可以用 Python 内置的 round()函数将它们缩短,该函数按照指定的精度四舍五入到一个浮点数。
    
    In [12]: round(1504746842.804046,3)
    
    Out[12]: 1504746842.804
    
     
    
    In [13]: round(1504746842.804046)
    
    Out[13]: 1504746843.0
    

     

    2 datetime 模块

     

    time 模块用于取得 Unix 纪元时间戳,并加以处理。但是,如果以更方便的格式显示日期,或对日期进行算术运算(例如,搞清楚 205 天前是什么日期,或 123天后是什么日期),就应该使用 datetime 模块。

    datetime 模块有自己的datetime 数据类型。datetime 值表示一个特定的时刻。

    In [15]: import datetime
    
     
    
    In [16]: datetime.datetime.now()
    
    Out[16]: datetime.datetime(2017, 9, 7, 9, 18, 13, 519043)
    
     
    
    In [17]: now = datetime.datetime.now()
    
     
    
    In [18]: now
    
    Out[18]: datetime.datetime(2017, 9, 7, 9, 19, 10, 745992)
    
     
    
    In [19]: now.year,now.month,now.day
    
    Out[19]: (2017, 9, 7)
    
     
    
    In [20]: now.hour,now.minute,now.second
    
    Out[20]: (9, 19, 10)
    
     
    
    In [23]: dt = datetime.datetime(2017,9,9,10,30,00)
    
     
    
    In [24]: dt
    
    Out[24]: datetime.datetime(2017, 9, 9, 10, 30)
    

     

    2.1 datetime.datetime.now()

    调用 datetime.datetime.now()返回一个 datetime 对象,表示当前的日期和时

    间,根据你的计算机的时钟。这个对象包含当前时刻的年、月、日、时、分、秒和微秒。也可以利用 datetime.datetime()函数,向它传入代表年、月、日、时、分、秒的整数,得到特定时刻的 datetime 对象。这些整数将保存在 datetime 对象的 year、month、day、hour、minute 和 second属性中。

     

    2.2 日期时间转换

    Unix 纪元时间戳可以通过 datetime.datetime.fromtimestamp(),转换为 datetime对象。datetime 对象的日期和时间将根据本地时区转换。

    In [26]: datetime.datetime.fromtimestamp(time.time())
    
    Out[26]: datetime.datetime(2017, 9, 7, 9, 25, 31, 96888)
    

     

    表达式 datetime.datetime.now()和 datetime.datetime.fromtimestamp(time.time())做的事情相同,它们都返回当前时刻的 datetime 对象。

    2.3 日期时间比较

    datetime 对象可以用比较操作符进行比较,弄清楚谁在前面。后面的datetime 对象是“更大”的值。

     

    In [30]: oct31_2015 = datetime.datetime(2015, 10, 31, 0, 0, 0)
    
     
    
    In [31]: oct31_2016 = datetime.datetime(2016, 10, 31, 0, 0, 0)
    
     
    
    In [32]: oct2015_31 = datetime.datetime(2015, 10, 31, 0, 0, 0)
    
     
    
    In [33]: oct31_2015 == oct2015_31
    
    Out[33]: True
    
     
    
    In [34]: oct31_2016 > oct31_2015
    
    Out[34]: True
    
     
    
    In [35]: oct31_2016 < oct31_2015
    
    Out[35]: False
    

     

     

    2.3 timedelta 数据类型

      datetime 模块还提供了 timedelta 数据类型,它表示一段时间,而不是一个时刻。

      要创建 timedelta 对象,就用 datetime.timedelta()函数。datetime.timedelta()函数接受关键字参数 weeks、days、hours、minutes、seconds、milliseconds 和 microseconds。

          

    In [37]: delta = datetime.timedelta(days=1, hours=10, minutes=9, seconds=8)
    
     
    
    In [38]: delta
    
    Out[38]: datetime.timedelta(1, 36548)
    
     
    
    timedelta 对象拥有的总时间以天、秒、微秒来表示。这些数字分别保存在 days、seconds 和 microseconds 属性中。
    
    In [39]: delta.days,delta.seconds,delta.microseconds
    
    Out[39]: (1, 36548, 0)
    
     
    
    total_seconds()方法返回只以秒表示的时间。
    
    In [42]: delta.total_seconds()
    
    Out[42]: 122948.0
    
     
    
    将一个 timedelta 对象传入 str(),将返回格式良好的、人类可读的字符串表示。
    
    In [43]: str(delta)
    
    Out[43]: '1 day, 10:09:08'
    

     

    2.4 日期时间运算

     

    算术运算符可以用于对 datetime 值进行日期运算。例如,要计算今天之后 1000天的日期。

    In [44]: dt = datetime.datetime.now()
    
     
    
    In [45]: dt
    
    Out[45]: datetime.datetime(2017, 9, 7, 9, 43, 47, 240307)
    
     
    
    In [46]: thousandDays = datetime.timedelta(days=1000)
    
     
    
    In [47]: dt + thousandDays
    
    Out[47]: datetime.datetime(2020, 6, 3, 9, 43, 47, 240307)
    

     

     

    利用+和-运算符,timedelta 对象与 datetime 对象或其他 timedelta 对象相加或相减。利用*和/运算符,timedelta 对象可以乘以或除以整数或浮点数。

     

     
    In [48]: aboutThirtyYears = datetime.timedelta(days=365 * 30)
    
     
    
    In [49]: dt
    
    Out[49]: datetime.datetime(2017, 9, 7, 9, 43, 47, 240307)
    
     
    
    In [50]: dt - aboutThirtyYears
    
    Out[50]: datetime.datetime(1987, 9, 15, 9, 43, 47, 240307)
    
     
    
    In [51]: dt - (2 * aboutThirtyYears)
    
    Out[51]: datetime.datetime(1957, 9, 22, 9, 43, 47, 240307)
    

     

    2.5 将 datetime 对象转换为字符串

      Unix 纪元时间戳和 datetime 对象对人类来说都不是很友好可读。利用 strftime()方

    法,可以将datetime 对象显示为字符串。(strftime()函数名中的f 表示格式,format)。

      该的 strftime()方法使用的指令类似于 Python 的字符串格式化。

          

    向 strftime()传入一个定制的格式字符串,其中包含格式化指定(以及任何需要的斜线、冒号等),strftime()将返回一个格式化的字符串,表示 datetime 对象的信息。

    In [52]: dt
    
    Out[52]: datetime.datetime(2017, 9, 7, 9, 43, 47, 240307)
    
     
    
    In [53]: dt.strftime('%Y/%m/%d %H:%M:%S')
    
    Out[53]: '2017/09/07 09:43:47'
    
     
    
    In [54]: dt.strftime('%I:%M %p')
    
    Out[54]: '09:43 AM'
    
     
    
    In [55]: dt.strftime("%B of '%y")
    
    Out[55]: "September of '17"
    

     

    2.6 将字符串转换成 datetime 对象

      strptime()函数与strftime()方法相反。定制的格式字符串使用相同的指令,像 strftime()一样。必须将格式字符串传入 strptime(),这样它就知道如何解析和理解日期字符串(strptime()函数名中 p 表示解析,parse)。

      

     In [56]: datetime.datetime.strptime("September of '17","%B of '%y")
    
    Out[56]: datetime.datetime(2017, 9, 1, 0, 0)
    
     
    
    In [57]: datetime.datetime.strptime('09:43 AM','%I:%M %p')
    
    Out[57]: datetime.datetime(1900, 1, 1, 9, 43)
    
     
    
    In [58]: datetime.datetime.strptime('2017/09/07 09:43:47','%Y/%m/%d %H:%M:%S')
    
    Out[58]: datetime.datetime(2017, 9, 7, 9, 43, 47)
    

     

     

    3 总结:Python 的时间函数

    3.1 时间数据类型

    在 Python 中,日期和时间可能涉及好几种不同的数据类型和函数。下面回顾表示时间的 3 种不同类型的值:

    •   Unix 纪元时间戳(time 模块中使用)是一个浮点值或整型值,表示自 1970 年1 月 1 日午夜 0 点(UTC)以来的秒数。
    •   datetime 对象(属于 datetime 模块)包含一些整型值,保存在 year、month、day、
    •   hour、minute 和 second 等属性中。
    •   timedelta 对象(属于 datetime 模块)表示的一段时间,而不是一个特定的时刻。

    3.2 函数返回值

    下面回顾了时间函数及其参数和返回值:

    •   time.time()函数返回一个浮点值,表示当前时刻的 Unix 纪元时间戳。
    •   time.sleep(seconds)函数让程序暂停 seconds 参数指定的秒数。
    •   datetime.datetime(year, month, day, hour, minute, second)函数返回参数指定的时刻的 datetime 对象。如果没有提供 hour、minute 或 second 参数,它们默认为 0。
    •   datetime.datetime.now()函数返回当前时刻的 datetime 对象。
    •   datetime.datetime.fromtimestamp(epoch)函数返回 epoch 时间戳参数表示的时刻的 datetime 对象。
    •   datetime.timedelta(weeks, days, hours, minutes, seconds, milliseconds, microseconds)函数返回一个表示一段时间的 timedelta 对象。该函数的关键字参数都是可选的,不包括 month 或 year。
    •   total_seconds()方法用于 timedelta 对象,返回 timedelta 对象表示的秒数。
    •   strftime(format)方法返回一个字符串,用 format 字符串中的定制格式来表示
    •   datetime 对象表示的时间。详细格式参见表 15-1。
    •   datetime.datetime.strptime(time_string, format)函数返回一个 datetime 对象,它的时刻由time_string 指定,利用format 字符串参数来解析。详细格式参见表 15-1。
  • 相关阅读:
    [JSOI2015]染色问题
    [ZJOI2016]小星星
    [BZOJ4361]isn
    [BZOJ4043/CERC2014]Vocabulary
    [BZOJ3622]已经没有什么好害怕的了
    [BZOJ2958]序列染色
    [SDOI2013]spring
    [Usaco2012 Nov]Concurrently Balanced Strings
    php常用函数集合
    制作item和category的mvc视图总结
  • 原文地址:https://www.cnblogs.com/jjzd/p/7488389.html
Copyright © 2020-2023  润新知