Python時間模塊

1 time 模塊:

  讀取系統時鐘當前時間;python

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

1.1 time.time()

  time.time()函數返回自1970 年 1 月 1 日 0 點以來的秒數,是一個浮點值,這個數字稱爲 UNIX 紀元時間戳。spa

 

  In [2]: time.time()

  Out[2]: 1504746354.671471

 

1.2 time.sleep()

若是須要讓程序暫停一下,就調用 time.sleep()函數,並傳入但願程序暫停的秒數。orm

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 值表示一個特定的時刻。blog

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屬性中。string

 

2.2 日期時間轉換

Unix 紀元時間戳能夠經過 datetime.datetime.fromtimestamp(),轉換爲 datetime對象。datetime 對象的日期和時間將根據本地時區轉換。form

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 對象。class

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。
相關文章
相關標籤/搜索