19.1_datetime時(shí)間模塊介紹

一、背景

Python 有很多種方式處理日期和時(shí)間,常見的時(shí)間處理的模塊是datetime、time、calendar,以下主要講解datetime模塊

  • datetime:(日期時(shí)間)模塊主要是用來表示日期的,就是我們常說的年月日時(shí)分秒
  • time:(時(shí)間)模塊主要側(cè)重點(diǎn)在時(shí)分秒
  • calendar:(日歷)模塊主要是用來表示年月日,是星期幾之類的信息

二、介紹

datetime模塊是這三個(gè)時(shí)間模塊中使用的相對較為頻繁,datetime有六個(gè)類,比較常用的有datetime、date、time、timedelta這四個(gè)

  • datetime:日期時(shí)間(datetime.datetime數(shù)據(jù)類型)
    • datetime.datetime數(shù)據(jù)類型的數(shù)據(jù)可以獲取year、month、weekday、isoweekday、day、hour、minute、second、mircosecond
      注意:
      1.weekday:返回目標(biāo)日期的工作日,0代表星期一,6代表星期日
      2.isoweekday:返回目標(biāo)日期的工作日,1代表星期一,7代表星期日,它和weekday的區(qū)別僅僅在于起始序數(shù)的不同
      3.datetime.datetime數(shù)據(jù)類型的數(shù)據(jù)可以比較(使用>、<、=符號),也可以做運(yùn)算(兩個(gè)datetime.datetime數(shù)據(jù)類型的數(shù)據(jù)進(jìn)行加減、與timedelta搭配使用加減)
  • date:日期(datetime.date數(shù)據(jù)類型)
  • time:時(shí)間(datetime.time數(shù)據(jù)類型)
  • timedelta:時(shí)間間隔(datetime.timedelta數(shù)據(jù)類型)

1.datetime/date/time實(shí)例

from datetime import datetime
from datetime import date
from datetime import time

now = datetime(2020, 1, 1, 19, 30, 0, 520)
now_2 = date(2020, 1, 1)
now_3 = time(19, 30, 0, 520)
print(type(now), now)
print(type(now_2), now_2)
print(type(now_3), now_3)

輸出結(jié)果如下:

<class 'datetime.datetime'> 2020-01-01 19:30:00.000520
<class 'datetime.date'> 2020-01-01
<class 'datetime.time'> 19:30:00.000520

2.datetime數(shù)據(jù)類型的時(shí)間實(shí)例

date = datetime(2022, 9, 20, 18, 30, 0)
print("year:{}".format(date.year))
print("month:{}".format(date.month))
print("weekday:{}".format(date.weekday()))
print("isoweekday:{}".format(date.isoweekday()))
print("day:{}".format(date.day))
print("hour:{}".format(date.hour))
print("minute:{}".format(date.minute))
print("second:{}".format(date.second))
print("microsecond:{}".format(date.microsecond))

輸出結(jié)果如下:

year:2022
month:9
weekday:1
isoweekday:2
day:20
hour:18
minute:30
second:0
microsecond:0

3.datetime數(shù)據(jù)類型比較

print("------大于比較------")
print(datetime(2022, 9, 5) > datetime(2022, 9, 4))
print(datetime(2022, 9, 5) > datetime(2022, 9, 6))
print("------小于比較------")
print(datetime(2022, 9, 3) < datetime(2022, 9, 4))
print(datetime(2022, 9, 5) < datetime(2022, 9, 4))
print("------相等比較------")
print(datetime(2022, 9, 5) == datetime(2022, 9, 4))
print(datetime(2022, 9, 4) == datetime(2022, 9, 4))

輸出結(jié)果如下:

------大于比較------
True
False
------小于比較------
True
False
------相等比較------
False
True

4.datetime拼接

date和time可以從datetime中分離出來,也可以通過combine方法合并成新的datetime

from datetime import datetime

now = datetime(2020, 1, 1, 19, 30, 0, 520)
print(now)
print(datetime.combine(now.date(), now.time()))  # 合并日期和時(shí)間

輸出結(jié)果如下:

2020-01-01 19:30:00.000520
2020-01-01 19:30:00.000520

三、使用

1.獲取指定時(shí)間

  • datetime(2020, 1, 1, 19, 30, 0, 520)

2.獲取當(dāng)前時(shí)間

  • datetime.now()
  • datetime.today()
    datetime.datetime數(shù)據(jù)類型的數(shù)據(jù)轉(zhuǎn)換成字符串類型使用isoformat方法
dt = datetime.now()
print(type(dt.isoformat()), dt.isoformat())  # 默認(rèn)以字符“T”分隔日期和時(shí)間
print(type(dt.isoformat(sep=" ")), dt.isoformat(sep=" "))  # 以空格“ ”分隔日期和時(shí)間

輸出結(jié)果如下:

<class 'str'> 2022-09-27T15:30:30.551975
<class 'str'> 2022-09-27 15:30:30.551975

3.其他方式獲取時(shí)間

  • datetime.fromtimestamp(timestamp):以時(shí)間戳為參數(shù)
    注意:使用fromtimestamp方法轉(zhuǎn)換的日期是基于當(dāng)前時(shí)區(qū)即東八區(qū),如果是基于零時(shí)區(qū),使用utcfromtimestamp方法
t = datetime.now().timestamp()
print(datetime.fromtimestamp(t))  # 本地時(shí)間
print(datetime.utcfromtimestamp(t))  # UTC時(shí)間

輸出結(jié)果如下:

2022-09-25 23:11:26.053696
2022-09-25 15:11:26.053696
  • datetime.fromordinal(ordinal):以ISO日歷公歷序數(shù)為參數(shù)
  • datetime.fromisoformat(date_string):以字符串格式時(shí)間為參數(shù)
    注意:datetime.fromisoformat是python3.7版本才支持

4.獲取年份、周數(shù)

轉(zhuǎn)換成datetime.datetime數(shù)據(jù)類型,使用isocalendar方法

dt = datetime.now()
print(dt.isocalendar())

輸出結(jié)果如下,依次為年份、第幾周、周幾:

(2022, 39, 2)

5.獲取時(shí)間戳

轉(zhuǎn)換成datetime.datetime數(shù)據(jù)類型,使用timestamp方法

dt = datetime(2020, 1, 1, 19, 30, 0, 520)
dt_2 = datetime.now()
print(dt.timestamp())
print(dt_2.timestamp())
print(int(dt_2.timestamp()))

輸出結(jié)果如下:

1577878200.00052
1664259734.803194
1664259734

6.替換時(shí)間

轉(zhuǎn)換成datetime.datetime數(shù)據(jù)類型,使用replace方法

dt = datetime.now()
dt_2 = dt.replace(year=2020, day=15, hour=12)
print(dt)
print(dt_2)

輸出結(jié)果如下:

2022-09-27 14:12:21.813312
2020-09-15 12:12:21.813312

四、轉(zhuǎn)換

1.datetime.datetime轉(zhuǎn)字符串

使用strftime方法,strftime即string format time,用來將時(shí)間格式化成字符串

1.1 創(chuàng)建datetime.datetime數(shù)據(jù),再使用strftime方法

dt = datetime.now()
print(type(dt), dt)
print(type(dt.strftime("%Y-%m-%d")), dt.strftime("%Y-%m-%d"))  # 常用日期一
print(type(dt.strftime("%Y%m%d%H%M%S:%f")), dt.strftime("%Y%m%d%H%M%S:%f"))  # 常用日期二

輸出結(jié)果如下:

<class 'datetime.datetime'> 2022-09-29 12:41:27.959123
<class 'str'> 2022-09-29
<class 'str'> 20220929124127:959123

1.2 直接使用strftime方法

dt = datetime.strftime(datetime.now(), "%Y-%m-%d %H:%M:%S")
print(type(dt), dt)

輸出結(jié)果如下:

<class 'str'> 2022-09-30 16:12:53

2.字符串轉(zhuǎn)datetime.datetime

使用strptime方法,strptime即string parse time,用來將字符串解析成時(shí)間

dt = datetime.strptime("2020-01-01 12:00:00", "%Y-%m-%d %H:%M:%S")
print(type(dt), dt)

輸出結(jié)果如下:

<class 'datetime.datetime'> 2020-01-01 12:00:00

字符串'%Y-%m-%d %H:%M:%S'規(guī)定了日期和時(shí)間部分的格式。詳細(xì)的說明請參考Python文檔

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容