色综合图-色综合图片-色综合图片二区150p-色综合图区-玖玖国产精品视频-玖玖香蕉视频

您的位置:首頁技術文章
文章詳情頁

python 常用日期處理-- datetime 模塊的使用

瀏覽:50日期:2022-07-12 15:19:43

僅以此篇記錄一下個人常用的 Python 處理日期的庫與函數,主要涉及的類庫有 Python 自帶的 datetime, time 和 calendar,以及第三方的 dateutil。說到日期處理基本上要覆蓋的概念有 date, time, datetime, timezone, calendar, 時間的比較與差值,解析與格式化顯示等。

在 datetime 模塊中類之間的繼承關系如下:

object├── date│ └── datetime├── time├── timedelta└── tzinfo└── timezone

我們著重體驗一下前面粗體顯示的 datetime, date, time, timedelta 對象, timezone 也不是不重要,有時候也可能只需要處理本地時間。

datetime, date, time 實例的創建

可以使用它們各自的構造函數,提供必要的參數來創建相應的實例,下面是它們的構造函數

datetime: def __new__(cls, year, month=None, day=None, hour=0, minute=0, second=0, microsecond=0, tzinfo=None, *, fold=0)date: def __new__(cls, year, month=None, day=None) time: def __new__(cls, hour=0, minute=0, second=0, microsecond=0, tzinfo=None, *, fold=0)

比如

from datetime import datetime, date, time, timedelta today = date(2019, 4, 24) # 2019-04-24

獲得當前日期或時間

date.today() #2019-04-24datetime.now() # 2019-04-24 21:41:40.226300 datetime.today() # 2019-04-24 21:41:50.336293datetime.today().date() #2019-04-24datetime.today().time() #21:41:50.336303 datetime.now().date()datetime.now().time()

從語義上應該調用 date.today() 和 datetime.now(),datetime.today() 只是 datetime 繼承自 date 的函數。

time 沒有 today() 或 now() 方法,所以只有通過 datetime.now() 來得到相應的 time, datetime 兼具 date 與 time 信息,所以總是可以經由 datetime 來獲得相應的 date 和 time。

解析字符串獲得實例

date.fromisoformat(’2019-04-24’) # 2019-04-24datetime.fromisoformat(’2019-04-24T13:12:23’) # 2019-04-24 13:12:23datetime.strptime(’04/24/2019’, ’%m/%d/%Y’) # 2019-04-24 00:00:00time.fromisoformat(’12:12:24+06:00’) #12:12:24+06:00

datetime, date 和 time 都有 fromisoformat() 方法,就是要了解它們各自的 ISO 表示格式。能指定格式來解析字符串只有 datetime 有 strptime() 方法,因為有了 datetime 也就有了相應的 date 與 time

date, datetime 與 time 相應的 ISO 格式如下

date ISO format: YYYY-MM-DD datetime ISO format: YYYY-MM-DD[*HH[:MM[:SS[.fff[fff]]]][+HH:MM[:SS[.ffffff]]]] time ISO format: HH[:MM[:SS[.fff[fff]]]][+HH:MM[:SS[.ffffff]]]

能自由解析字符串的就是 datetime.strptime(str, fmt),Python 借鑒了標準 C 的日期格式定義字符串,見 strftime() and strptime() Behavior. 后面的 strftime() 函數也要用到相同的格式定義法。

注:strftime() 和 strptime() 中的 f 和 p 分別對應著 format 和 parse 的首字母。

基于 Timestamp 來創建實例

Python 本身沒有 Timestamp 這么一個類型,這里的 timestamp 是一個浮點數表示的

ts = datetime.today().timestamp() # 1556161777.38553date.fromtimestamp(ts) # 2019-04-24datetime.fromtimestamp(ts) # 2019-04-24 22:09:37.385530

time 沒有 fromtimestamp() 方法

格式化輸出

date, datetime 和 time 都有 isoformat() 和 strftime(fmt) 函數,格式字符串請參考 strftime() and strptime() Behavior。

date.today().strftime(’%a %b %d, %Y’) # Wed Apr 24, 2019datetime.today().isoformat() # 2019-04-24T22:21:38.747318datetime.today().time().strftime(’%Y’) # 1900date.today().strftime(’%S’) # 00

上面是幾個例子,注意在 Python 中像 time 沒有年月日信息時格式化時想要輸出年份會得到不期望的值,但不會象 Java 中那樣報錯。比如下面的 Java 代碼

DateTimeFormatter formatter = DateTimeFormatter.ofPattern('yyyy-MM-dd');LocalDate.now().format(formatter); //2019-04-24LocalTime.now().format(formatter); //Exception java.time.temporal.UnsupportedTemporalTypeException: Unsupported field: YearOfEra

由于 LocalTime.now() 沒有年月日信息,所以無法格式化為 yyyy-MM-dd。

時間, 日期的比較與 timedelta

date, datetime, time 都定義有 __lt__, __le__, __ne__, __gt__, __ge__, __eq__ 函數,所以兩個相同類型的實例之間是可以進行比較時間上的先后的。 其中的 date, datetime 還定義了 __sub__ 和 __rsub__ 函數,因此兩個 date 或兩個 datetime 實例進行相減會得到一個 timedelta 實例 另外, date, datetime 也定義了 __add__, __radd__ 函數,date 或 datetime 可以加減一個 timedelta 來得到一個新的實例

下面看幾個簡單的示例

d1 = datetime.today() # 2019-04-24 23:00:31.672769delta = timedelta(days=2, weeks=1, seconds=-3) # 8 days, 23:59:57d2 = d1 + delta # 2019-05-03 23:00:28.672769d3 = d1 - delta # 2019-04-15 23:00:34.672769 d2 - d1 # 8 days, 23:59:57d2 > d1 # Trued1 < d3 # False datetime.today().date() + delta) # 2019-05-02

注意,不同類型間不能相減,比如用 date 減去一個 datetime 就不合法了。d1 + delta, d1 - delta 和 delta + d1 都沒問題, 但是 delta - d1 就不行了。

timedelta 表示了兩個時間的差值,用它來推算另一個實例的時候不帶有日歷信息,如果想要在日歷上推演就得借助于 calendar。

不可忽略的 time 模塊

前面講到的是 datetime 模塊中的 time 類型,Python 還自帶了 time 模塊,由 import time 引入。它提供了一些很實用的功能

time 包含了完整的如上的 datetime 信息,并不像 datetime 中的 time 不含年月日信息 locatime(), strptime(), gmtime(), asctime(), mktime() 用以構造 time 實例 strftime() 可用來格式化輸出 time.time() 得到當前的 Unix 時間戳 time.sleep(sec) 用來暫停當前線程若干秒

關于 calendar 和 dateutil 的內容有后續

以上就是python 日期處理的詳細內容,更多關于python 日期處理的資料請關注好吧啦網其它相關文章!

標簽: Python 編程
相關文章:
主站蜘蛛池模板: 俺来也欧美亚洲a∨在线 | 在线はじめてのおるすばん | 韩国v欧美v亚洲v日本v | 国产主播福利精品一区二区 | 中文字幕毛片 | 九九精品视频在线播放8 | 99久久精彩视频 | 一区二区三区在线免费视频 | 成年免费在线观看 | 中文字幕一区二区在线观看 | 免费三级毛片 | 日韩美女免费线视频 | 日韩欧美精品在线视频 | 日韩三级黄色片 | 亚洲精品韩国美女在线 | 视频一区二区三区自拍 | 亚洲七七久久精品中文国产 | 国产精品理论片 | 国产精品久久久久久久久久一区 | 亚洲欧美日本综合 | 亚洲成人免费在线视频 | 免费国产不卡午夜福在线观看 | 精品国产欧美一区二区五十路 | 成人欧美一区二区三区视频 | 精品国产香港三级 | 99热在线观看| 欧美色大成网站www永久男同 | 失禁h啪肉尿出来高h男男 | 一级片美国 | 三级做人爱c视频18三级 | 精品欧美成人高清在线观看2021 | 涩里番资源网站在线观看 | 娇喘嗯嗯~轻点啊视频福利 | 一区二区在线看 | 久久精品国产6699国产精 | 日韩大片高清播放器大全 | 亚洲精品资源网在线观看 | 成人手机在线视频 | 台湾精品视频在线观看 | 99热com| 久热香蕉在线视频 |