Python Delorean 優秀的時間格式智慧轉換工具
DeLorean是一個Python的第三方模組,基於 pytz 和 dateutil 開發,用於處理Python中日期時間的格式轉換。
由於時間轉換是一個足夠微妙的問題,DeLorean希望為移位、操作和生成日期時間提供一種更乾淨、更省事的解決方案。比如,例項化字串形式的時間物件,Delorean只需要 parse 指定字串,不需要宣告其格式就可以進行轉換。
至於 Delorean 這個模組名稱的由來,Delorean 是電影《回到未來》裡的那輛極為炫酷的鷗翼汽車,採用這部電影裡的非常具有代表性的汽車的名字作為庫名,作者估計也是想表達使用這個庫能讓你在時空裡任意遨遊,沒有掣肘。
這個模組最讓我感到智慧的是,它能自動識別字符串的時間格式,轉換為 Delorean 物件,而且這個 Delorean 物件和 Datetime 物件是相通的:
from delorean import parse
parse("2011/01/01 00:00:00 -0700")
# Delorean(datetime=datetime.datetime(2011, 1, 1, 0, 0), timezone=pytz.FixedOffset(-420))
parse("2018-05-06")
# Delorean(datetime=datetime.datetime(2018, 6, 5, 0, 0), timezone='UTC')
下面就來介紹一下它的基本使用方法。
1.準備
開始之前,你要確保Python和pip已經成功安裝在電腦上,如果沒有,可以訪問這篇文章:超詳細Python安裝指南進行安裝。
(可選1) 如果你用Python的目的是資料分析,可以直接安裝Anaconda: Python資料分析與挖掘好幫手—Anaconda ,它內建了Python和pip.
(可選2) 此外,推薦大家用VSCode編輯器,它有許多的優點: Python 程式設計的最好搭檔—VSCode 詳細指南 。
請選擇以下任一種方式輸入命令安裝依賴 :
1. Windows 環境 開啟 Cmd (開始-執行-CMD)。
2. MacOS 環境 開啟 Terminal (command+空格輸入Terminal)。
3. 如果你用的是 VSCode編輯器 或 Pycharm,可以直接使用介面下方的Terminal.
pip install Delorean
2.Delorean 基礎使用
輕鬆獲取當前時間:
from delorean import Delorean
d = Delorean()
print(d)
# Delorean(datetime=datetime.datetime(2021, 10, 6, 9, 5, 57, 611589), timezone='UTC')
將datetime格式的時間轉化為Delorean:
import datetime
from delorean import Delorean
d = Delorean()
print(d)
d = Delorean(datetime=datetime.datetime(2018, 5, 10, 8, 52, 23, 560811), timezone='UTC')
# 這裡預設的是UTC時間
print(d)
# Delorean(datetime=datetime.datetime(2021, 10, 6, 9, 5, 57, 611589), timezone='UTC')
# Delorean(datetime=datetime.datetime(2018, 5, 10, 8, 52, 23, 560811), timezone='UTC')
轉換為國內時區:
import datetime
from delorean import Delorean
d = Delorean(datetime=datetime.datetime(2018, 5, 10, 8, 52, 23, 560811), timezone='UTC')
d = d.shift("Asia/Shanghai")
print(d)
# Delorean(datetime=datetime.datetime(2018, 5, 10, 16, 52, 23, 560811), timezone='Asia/Shanghai')
輸出為 datetime、date 也不在話下:
import datetime
from delorean import Delorean
d = Delorean(datetime=datetime.datetime(2018, 5, 10, 8, 52, 23, 560811), timezone='UTC')
d = d.shift("Asia/Shanghai")
print(d.datetime)
print(d.date)
# 2018-05-10 16:52:23.560811+08:00
# 2018-05-10
檢視時間戳及UTC時間:
import datetime
from delorean import Delorean
d = Delorean(datetime=datetime.datetime(2018, 5, 10, 8, 52, 23, 560811), timezone='UTC')
d = d.shift("Asia/Shanghai")
print(d.epoch)
print(d.naive)
# 1525942343.560811
# 2018-05-10 08:52:23.560811
用unix時間戳初始化Delorean:
from delorean import epoch
d = epoch(1357971038.102223).shift("Asia/Shanghai")
print(d)
# Delorean(datetime=datetime.datetime(2013, 1, 12, 14, 10, 38, 102223), timezone='Asia/Shanghai')
Delorean支援timedelta的時間加減法。Delorean可以使用timedelta進行加減,得到一個Delorean物件:
import datetime
from delorean import Delorean
d = Delorean(datetime=datetime.datetime(2018, 5, 10, 8, 52, 23, 560811), timezone='UTC')
d = d.shift("Asia/Shanghai")
print(d)
d2 = d + datetime.timedelta(hours=2)
print(d2)
d3 = d - datetime.timedelta(hours=3)
print(d3)
# Delorean(datetime=datetime.datetime(2018, 5, 10, 16, 52, 23, 560811), timezone='Asia/Shanghai')
# Delorean(datetime=datetime.datetime(2018, 5, 10, 18, 52, 23, 560811), timezone='Asia/Shanghai')
# Delorean(datetime=datetime.datetime(2018, 5, 10, 13, 52, 23, 560811), timezone='Asia/Shanghai')
3. Delorean 高階使用
通常情況下我們不關心有多少微妙或者多少秒,因此Delorean提供了非常方便的過濾方式:
from delorean import Delorean
d = Delorean()
print(d)
# Delorean(datetime=datetime.datetime(2019, 3, 14, 4, 0, 50, 597357), timezone='UTC')
d.truncate('second')
# Delorean(datetime=datetime.datetime(2019, 3, 14, 4, 0, 50), timezone='UTC')
d.truncate('hour')
# Delorean(datetime=datetime.datetime(2019, 3, 14, 4, 0), timezone='UTC')
d.truncate('month')
# Delorean(datetime=datetime.datetime(2019, 3, 1, 0, 0), timezone='UTC')
d.truncate('year')
# Delorean(datetime=datetime.datetime(2019, 1, 1, 0, 0), timezone='UTC')
另外,datetime格式的字串處理的時候轉換需要標明各種各樣的格式,在Delorean裡,我們不需要那麼麻煩,直接 parse 就可以了:
from delorean import parse
parse("2011/01/01 00:00:00 -0700")
# Delorean(datetime=datetime.datetime(2011, 1, 1, 0, 0), timezone=pytz.FixedOffset(-420))
parse("2018-05-06")
# Delorean(datetime=datetime.datetime(2018, 6, 5, 0, 0), timezone='UTC')
未聞 Code·知識星球開放啦!
一對一答疑爬蟲相關問題
職業生涯諮詢
面試經驗分享
每週直播分享
......
未聞 Code·知識星球期待與你相見~
一二線大廠在職員工
十多年碼齡的程式設計老鳥
國內外高校在讀學生
中小學剛剛入門的新人
在 “未聞 Code技術交流群” 等你來!
入群方式:新增微信“mekingname”,備註“粉絲群”(謝絕廣告黨,非誠勿擾!)
- 一日一技:二分偏左,二分搜尋在分散式系統裡面也有用?
- 一日一技:使用Python翻譯HTML中的文字字串
- 一日一技:如何讓自己的工具函式在Python全域性可用?
- 一日一技:Any與TypeVar,讓IDE的自動補全更好用
- 一日一技:用Python做遊戲有多簡單
- 一日一技:如何批量給PDF新增水印?
- 一日一技:拋掉JavaScript,用HTML和Python做網站
- 一個讓我感到 "細思極恐" 的開源專案!
- 一日一技:FastAPI 介面限流
- 5 分鐘,使用內網穿透快速實現遠端手機桌面!
- Python Delorean 優秀的時間格式智慧轉換工具
- 寫在公眾號粉絲2w時
- 一日一技:協程與多程序的完美結合
- 一個 "喪心病狂" 的開源專案
- python中如何優雅的實現程式碼與敏感資訊分離?
- Pandas 多程序處理資料,速度快了不少!
- 爬蟲出海Step by Step(一)
- 一日一知:架構到底是什麼?
- Python識別花卉種類,並自動整理分類!
- 這幾個摸魚神器,你怎麼能不知道