<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
認識 datetime 時間包:
獲取當前的時間
# 匯入包與模組 # 第一種匯入方法: from datetime import datetime # 第一個 datetime 是包 ;第二個 datetime 是模組 # 第二種匯入方法: import datetime # 直接匯入 datetime 包 # ************************************************************************* # 使用方法: # 如果我們使用第一種匯入方法,那麼我們就可以直接通過 datetime 模組呼叫 now() 函數: print(datetime.now()) # >>> 執行結果如下: # >>> 2020-01-16 14:20:19.534920 # >>> 返回的是當前 年、月、日、時、分、秒、毫秒的 datetime 物件 # 如果我們使用第二種匯入方法,那麼我們就需要 datetime.datetime.now() 的方式來呼叫now() 函數: print(datetime.datetime.now()) # >>> 執行結果如下: # >>> 2020-01-16 14:22:11.534920 # >>> 返回的是當前 年、月、日、時、分、秒、毫秒的 datetime 物件
獲取時間間隔
其實獲取時間間隔本身沒有什麼用,它需要配合我們剛剛提到的 datetime 模組的 now() 函數來配合使用。
# 匯入包 from datetime import datetime from datetime import timedelta # 這裡需要注意:timedelta 並不是模組,而是一個函數; # 至於為什麼不是模組,我們不進行深究;可以猜測一下, timedelta 可能是寫在 datetime 包下 __init__.py 檔案內被提前匯入的函數 # 使用方法: timeobj = timedelta(days=0, seconds=0, microseconds=0, milliseconds=0, minutes=0, hours=0, weeks=0) # days:間隔的天數 # seconds:間隔的秒數 # microseconds:間隔的毫秒數 # milliseconds:間隔的微秒數 # minutes:間隔的分鐘數 # hours:間隔的小時數 # weeks:間隔的週數 # 這些引數我們可以全部傳,也可以只傳一個;像間隔一天、兩天這種情況,我們就可以使用 hours 或 days # 傳入型別為 整型 ,支援整數與負數,一般我們建議使用正數。
datetime 時間包的小案例
結合獲取當前時間與間隔,我們看一下下面這個小案例:
from datetime import datetime from datetime import timedelta now = datetime.now() print(now, type(now)) # >>> 執行結果如下: # >>> 2020-01-16 15:04:00.492240 <class 'datetime.datetime'> three_days = timedelta(days=3) after_three_days = now + three_days print('三天之後的時間是:', after_three_days) # >>> 執行結果如下: # >>> 三天之後的時間是: 2020-01-16 15:04:00.492240 before_three_days = now - three_days print('三天之前的時間是:', after_three_days) # >>> 執行結果如下: # >>> 三天之前的時間是: 2020-01-16 15:04:00.492240 one_hour = timedelta(hours=1) before_one_hour = now - one_hour print('一小時之前的時間是:', before_one_hour) # >>> 執行結果如下: # >>> 一小時之前的時間是: 2020-01-16 14:04:00.492240
通過上面的小案例我們知道,時間物件之間我們可以做 加法與減法 的操作,但是時間物件有個問題。
它無法進行時間物件之間的傳輸,比如A服務想要給B服務傳輸一個時間物件,但是時間物件是無法傳輸的,必須先要轉成字串,然後才可以進行傳輸,接下來我們就學習一下如何將時間物件轉成字串。
上文我們知道,想要獲取時間物件就要呼叫 datetime 模組的 now() 函數,並且執行獲取一個時間物件。
然後賦值給一個 now 變數,now 變數的值作為一個時間物件也會有自己的內建函數。
通過呼叫內建函數 strftime() 【strftime 是一個格式化字串的標準】,通過這個字元化的標準就可以通過 format 將當前的日期時間物件按照 format 的標準轉為時間字串。
用法如下:
# 獲取時間物件 from datetime import datetime now = datetime.datetime.now() # 時間物件轉為字串 date_str = now.strftime(format)
範例如下:
from datetime import datetime date = datetime.now() str_date = date.strftime('%Y-%m-%d %H:%M:%S') # 括號內為時間型別的格式化標準的字元集合 print(str_date) # >>> 執行結果如下: # >>> 2020-01-16 15:44:26 # 符合時間格式的字串 # >>> 其實還有更多的時間格式符,在下面會有詳細介紹
接下來,我們用上面的 datetime 時間包的小案例 來實現我們的 時間物件轉字串 場景
from datetime import datetime from datetime import timedelta now = datetime.now() # print(now, type(now)) now_str = now.strftime('%Y-%m-%d %H:%M:%S') print(now_str, type(now_str)) # >>> 執行結果如下: # >>> 2020-01-16 16:14:15 <class 'str'> 時間物件已經按照strftime標準格式化成了字串型別 three_days = timedelta(days=3) after_three_days = now + three_days # print('三天之後的時間是:', after_three_days) after_three_days_str = after_three_days.strftime('%Y/%m/%d %H:%M:%S') print(after_three_days_str, type(after_three_days_str)) # >>> 執行結果如下: # >>> 2020/01/16 16:19:35 <class 'str'> # >>> 通過這裡我們發現,只要我們只要保證格式符是我們想要的屬性,格式的狀態我們可以自己去定義 # >>> 甚至這些 '/' 都可以不需要,看下面的執行結果 after_three_days_str = after_three_days.strftime('%Y%m%d') print(after_three_days_str, type(after_three_days_str)) # >>> 執行結果如下: # >>> 20220313 <class 'str'> # >>> 驗證了格式的狀態我們可以自己去定義的想法,甚至我們都沒有輸出 時、分、秒
時間字串轉時間型別方法如下:
# 獲取時間模組 from datetime import datetime # 時間字串轉時間型別 datetime.strptime(tt,format) # 引數介紹: # tt:符合時間格式的字串 # format:tt時間字串匹配規則
範例如下:
from datetime import datetime str_date = '2020-01-01 08:08:08' date_obj = datetime.strptime(str_date, '%Y-%m-%d %H:%M:%S') # 格式化標準要與時間字串匹配 print(date_obj, type(date_obj)) # >>> 執行結果如下: # >>> 2020-01-01 08:08:08 <class 'datetime.datetime'>
同樣的使用 datetime 時間包的小案例 來實現我們的 時間字串轉時間型別 場景
from datetime import datetime from datetime import timedelta now = datetime.now() # print(now, type(now)) now_str = now.strftime('%Y-%m-%d %H:%M:%S') # print(now_str, type(now_str)) now_obj = datetime.strptime(now_str, '%Y-%m-%d %H:%M:%S') print(now_obj, type(now_obj)) # >>> 執行結果如下: # >>> 2020-01-10 18:00:54 <class 'datetime.datetime'>
上面我們進行 時間物件轉字串的時候,將時間物件的 '%Y-%m-%d %H:%M:%S' 格式進行了取捨,只輸出了 '%Y-%m-%d' ; 這我們嘗試 時間字串轉為時間型別 同樣做一個取捨試一下,也只保留 '%Y-%m-%d
from datetime import datetime from datetime import timedelta now = datetime.now() three_days = timedelta(days=3) after_three_days = now + three_days # print('三天之後的時間是:', after_three_days) after_three_days_str = after_three_days.strftime('%Y/%m/%d %H:%M:%S') # print(after_three_days_str, type(after_three_days_str)) after_three_days_obj = datetime.strptime(after_three_days_str, '%Y/%m/%d') print(after_three_days_obj, type(after_three_days_obj)) # >>> 執行結果如下: # >>> ValueError: time data '2020/01/13 18:22:19' does not match format '%Y%m%d' # >>> 這裡提示我們 格式符 與 字串 不匹配,所以當時間字串轉為時間型別時,格式狀態要保持一致 # 補上 時、分、秒 看看執行結果 after_three_days_obj = datetime.strptime(after_three_days_str, '%Y/%m/%d %H:%M:%S') print(after_three_days_obj, type(after_three_days_obj)) # >>> 執行結果如下: # >>> 2020-01-13 18:26:58 <class 'datetime.datetime'>
接下來我們再看看被我們 使用 '%Y/%m/%d' 截斷的 時間型別轉為字串,再轉為時間型別會是怎樣的輸出結果。
from datetime import datetime from datetime import timedelta now = datetime.now() three_days = timedelta(days=3) before_three_days = now - three_days # print('三天之前的時間是:', after_three_days) before_three_days_str = before_three_days.strftime('%Y%m%d') # print(before_three_days_str, type(before_three_days_str)) before_three_days_obj = datetime.strptime(before_three_days_str, '%Y%m%d') print(before_three_days_obj, type(before_three_days_obj)) # >>> 執行結果如下: # >>> 2020-01-13 00:00:00 <class 'datetime.datetime'> # >>> 這裡我們發現,時間型別轉為字串,再轉為時間型別,由於使用 '%Y/%m/%d' 截斷轉為字串的原因 # >>> 在再次轉為 時間型別 後,它的輸出結果的 時、分、秒 部分變成了 00:00:00
非時間格式字串轉時間型別
我們直接定義一個 非時間格式的字串,嘗試轉為 時間型別 看看會有怎樣的結果
from datetime import datetime from datetime import timedelta date_time = '2020 01 A' print(datetime.strptime(date_time, '%Y %m')) # >>> 執行結果如下: # >>> ValueError: unconverted data remains: A # >>> 這裡報錯資訊為:不知道 A 對應的格式是什麼,字串格式中,我們也沒有對 A 使用格式化方法; # >>> 同時,date_time 也是一個非標準的時間格式字串,我們沒有辦法對其進行時間格式的轉換
字元 | 介紹 |
---|---|
%Y | 完成的年份 如2020 |
%m | 月份, 1-12 |
%d | 月的某一天,1-31 |
%H | 一天中的第幾個小時,24小時(00-23) |
%I | 一天中的第幾個小時,12小時(01-12) |
%M | 當前的第幾分鐘(00-59) |
%S | 當前分的第幾秒(00-61) 多出來的兩秒是閏年的 |
%f | 當前秒的第幾毫秒 |
%a | 簡化的星期,如Wed |
%A | 完整的星期,如Wednesday |
%b | 簡化的月份,如二月 Feb |
%B | 完整的月份,如二月 February |
%c | 原生的日期和時間,如 Wed Feb 5 10:14:30 2020 |
%p | 上午或下午;AM 為上午 ,PM為下午 |
%j | 一年中的第幾天 |
%U | 一年中的星期數 |
在上文我們學習 python 中第一個內建包 datetime (日期時間包),學習瞭如何使用 datetime 如何獲取當前的日期物件以及日期物件與日期字串之間的互相轉換。
接下來我們學習一下 python 中的 第一個內建模組,它也是用來處理時間的,那就是 time 模組。學會使用 time 模組,可以豐滿我們對時間的處理。
什麼是時間戳?其實時間戳就是時間,只不過他的起始時間有所不同。
time 模組與它的函數們:
1.時間處理,轉換成時間格式
2.time 函數 ,生成時間戳數
3.localtime 函數,獲取本地時間函數
localtime 函數 需要了解對應的欄位介紹
4.sleep 函數 ,暫停/休眠/等待
5.strftime 函數,將時間物件轉為字串
6.strptime 函數,將時間字串轉為時間物件
# 匯入包; import time # 使用方法: time.time() # 返回值: # 秒級別的浮點型別 # 範例: # 1580878485.4009378
注意:每個語言返回的時間戳格式都不太一樣,有的是返回秒級別,有的是返回毫秒級別。無論哪一種,時間都是一樣的,只是 秒 與 毫秒 之間的轉換而已。
獲取本地時間函數 - localtime
# 匯入包; import time # 使用方法: time.localtime(timestamp) # 引數介紹: # timestamp:可以傳入一個時間戳,傳入後 localtime() 函數會將傳入的時間戳轉為 時間物件。 # 可以不傳入,如果不傳入時間戳;會預設返回當前最新的時間物件。
範例如下:
import time test_time = time.localtime() print(test_time) # >>> 執行結果如下: # >>> time.struct_time(tm_year=2022, tm_mon=3, tm_mday=11, tm_hour=13, tm_min=33, tm_sec=52, tm_wday=4, tm_yday=70, tm_isdst=0) # >>> 輸出的是 localtime 欄位資訊
localtime 對應欄位資訊介紹
屬性名 | 介紹 | 取值範圍 |
---|---|---|
tm_year | 四位數的年單位 | 1970~∞ |
tm_mon | 月 | 1~12 |
tm_mday | 日 | 1~31 |
tm_hour | 小時 | 0~23 |
tm_min | 分鐘 | 0~59 |
tm_sec | 秒 | 0~61(閏年會多兩秒) |
tm_wday | 一週的第幾天 | 0~6(0是週一) |
tm_yday | 一年的第幾日 | 1~366(支援儒略曆,現用的是格里曆即公曆) |
tm_isdst | 夏令時 | -1 或 0 ;1 代表是否是夏時令 |
來看一下 localtime 函數 的小案例
import time test_time = time.time() test_time_obj = time.localtime(test_time) print(test_time_obj, type(test_time_obj)) # >>> 執行結果如下: # >>> 1578898063.2553177 # >>> time.struct_time(tm_year=2020, tm_mon=1, tm_mday=13, tm_hour=14, tm_min=46, tm_sec=44, tm_wday=4, tm_yday=70, tm_isdst=0) <class 'time.struct_time'> # >>> 通過這樣的方式,就可以將我們的時間戳轉為 time.struct_time 的時間物件,可讀性會變得很好
上文我們提到過,localtime() 函數內可以不傳入引數,獲取的是當前最新的時間物件。我們也來看一下:
import time current_time = time.localtime() print(current_time) # >>> 執行結果如下: # >>> time.struct_time(tm_year=2022, tm_mon=1, tm_mday=13, tm_hour=14, tm_min=57, tm_sec=47, tm_wday=4, tm_yday=70, tm_isdst=0)
剛剛提到過,我們的 python 獲取的是秒級別的時間戳,如果我們想要獲取 毫秒 級別的時間戳要怎麼辦?其實很簽單,我們只需要需要將獲取的時間戳 *1000(乘以1000就可以了)就可以獲取 毫秒級 的時間戳了。
import time print(time.time()) print(time.time() * 1000) # >>> 執行結果如下: # >>> 1646982476.7887278 # >>> 1646982476788.7278 # >>> 上下比對一下,發現我們的 秒級別 時間戳已經變為了 毫秒級 的時間戳了
暫停函數 - sleep
sleep():名如其實,該函數會將我們的程式暫停執行一段時間。
# 匯入包; import time # 使用方法: time.sleep(second) # 引數介紹: # second:希望程式被暫停執行的秒數
範例如下:
import time for i in range(5): print(i) time.sleep(1) # >>> 大家可以在自己電腦上試試執行效果
time 中的 strftime
# 匯入包; import time # 使用方法: time.strftime(format, t) # 引數介紹: # format:時間的格式化規範 # t:time.localtime 對應的時間型別 # >>> 其實用法與前文介紹的 datetime 的 strftime 完全一致,只不過對應的物件是 time 的時間物件
範例如下:
import time str_time = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime()) print(str_time) # >>> 執行結果如下: # >>> 2020-01-13 16:22:21
time 中的 strptime
# 匯入包; import time # 使用方法: time.strptime(time_str, format) # 引數介紹: # time_str:符合時間格式的字串 # format:確保與 time_str 一致的格式化標準(字串的內容都都可以通過 時間格式符 匹配上)
範例如下:
import time obj_time = time.strptime('2020-01-13', '%Y-%m-%d') print(obj_time) # >>> 執行結果如下: # >>> time.struct_time(tm_year=2020, tm_mon=1, tm_mday=13, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=0, tm_yday=13, tm_isdst=-1)
前文我們在講解 datetime 包的時候,並沒有講解如何使用 datetime 中生成時間戳,現在順著 時間戳部分一起帶出來。
# 匯入包; import datetime # 使用方法: now = datetime.datetime.now() datetime.datetime.timestamp(now) # 不同於 time 模組的 time 函數 的生成 時間戳 # 而是將一個 datetime 物件 轉為時間戳,所以括弧中不傳入引數是會報錯的。 # 引數介紹: # now:datetime 的時間物件
範例如下:
import datetime now = datetime.datetime.now() now_timestamp = datetime.datetime.timestamp(now) print(now_timestamp, type(now_timestamp)) # >>> 執行結果如下: # >>> 1642067213.882046 <class 'float'> 秒級別的時間戳,浮點型別
# 匯入包; import datetime # 使用方法: datetime.datetime.fromtimestamp(timestamp) # 引數介紹: # timestamp:時間戳 # 返回值: # 返回一個 datetimes 的日期物件
範例如下:
import datetime now = datetime.datetime.now() now_timestamp = datetime.datetime.timestamp(now) datetime_obj = datetime.datetime.fromtimestamp(now_timestamp) print(datetime_obj, type(datetime_obj)) # >>> 執行結果如下: # >>> 2020-01-13 17:43:08.795082 <class 'datetime.datetime'>
可能大家會有個疑問,既然 datetime 包 與 time 模組的功能很多都是一樣的,那麼為什麼會有這兩個包和模組的存在呢?
其實,在實際工作中 datetime 包更多的是對於日期的處理;而 time 模組更多的則是對時間的處理,比如 時、分、秒 這樣的格式,使用 time 模組來處理會更合適一些。
到此這篇關於Python學習之時間包使用教學詳解的文章就介紹到這了,更多相關Python時間包內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45