[Python]日期與時間⁽⁵²⁾|datetime模塊

2021-12-21 視覺算法與編程實驗室
T52:Python datetime

在此篇教程中,你將學習在 Python 中通過以下示例來各種操作日期時間

Python 有一個名為 datetime 的模塊來處理日期時間。在深入研究之前,讓我們先創建一些與日期時間相關的簡單程序。

 

import datetime

datetime_object = datetime.datetime.now()
print(datetime_object)

 

2021-12-18 19:21:43.128008

在這個程序中,我們使用 import datetime 語句導入了 datetime 模塊。

datetime 模塊中定義的其中的一種類即 datetime 類。然後,我們使用 now() 方法創建一個包含當前本地日期時間的 datetime 對象,並列印出如上的結果。

 

import datetime

date_object = datetime.date.today()
print(date_object)

 

2021-12-18

在這個程序中,我們使用 date 類中定義的 today() 方法來獲取包含當前本地日期的 date 對象。

▋ datetime 內部是什麼?

我們可以使用 dir() 函數獲取包含模塊所有屬性的列表,如下:

import datetime

print(dir(datetime))

運行程序時,輸出:

['MAXYEAR', 'MINYEAR', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', '_divide_and_round', 'date', 'datetime', 'datetime_CAPI', 'time', 'timedelta', 'timezone', 'tzinfo']

▶ datetime 模塊中常用的有:

date 類

time 類

datetime 類

timedelta 類

 

可以從 date 類實例化 date 對象。date 對象表示日期(包含了年、月和日)。

 

import datetime

d = datetime.date(2021, 12, 02)
print(d)

 

2021-12-02

如果你想了解上面示例中的 date 類中的構造函數 date(),見以下代碼:首先從 datetime 模塊導入 date 類, date() 構造函數接受三個參數:年、月和日。變量 a 是一個 date 對象:

from datetime import date

a = date(2021, 12, 02)
print(a)

 

可以使用名為 today() 的類方法來創建包含當前日期的 date 對象,如下:

from datetime import date

today = date.today()

print("當前的日期 =", today)

 

我們還可以從時間戳 時間戳轉換為日期,如下:

from datetime import date

timestamp = date.fromtimestamp(123456789)
print("日期 =", timestamp)

 

日期 = 1973-11-30

 

我們也可以很容易地從 date 對象中獲取年、月、日、星期幾等,如下:

from datetime import date

# 今天日期的 date 對象
today = date.today()

print("當前年份:", today.year)
print("當前月份:", today.month)
print("當然日分:", today.day)

 

從 time 類實例化的 time 對象表示本地時間。

 

from datetime import time

# time(hour = 0, minute = 0, second = 0)
a = time()
print("a =", a)

# time(hour, minute and second)
b = time(12, 34, 56)
print("b =", b)

# time(hour, minute and second)
c = time(hour = 12, minute = 34, second = 56)
print("c =", c)

# time(hour, minute, second, microsecond)
d = time(12, 34, 56, 1234567)
print("d =", d)

 

a = 00:00:00
b = 12:34:56
c = 12:34:56
d = 12:34:56.1234567

 

創建 time 對象後,可以列印其屬性,如 hour、minute 等,如下:

from datetime import time

a = time(12, 34, 56)

print("時 =", a.hour)
print("分 =", a.minute)
print("秒 =", a.second)
print("微秒 =", a.microsecond)

 

時 = 12
分 = 34
秒 = 56
微秒 = 0

注意:上面沒有傳遞 microsecond 參數。因此,將列印其默認值 0。

 

datetime 模塊有一個名為 dateclass 的類,該類可以包含來自 日期 時間  對象的信息。

 

from datetime import datetime

#datetime(年, 月, 日)
a = datetime(2021, 12, 12)
print(a)

# datetime(年, 月, 日, 時, 分, 秒, 微秒)
b = datetime(2021, 12, 02, 23, 59, 59, 123456)
print(b)

 

2021-12-12 00:00:00
2021-12-12 23:59:59.123456

注意:以上的datetime()構造函數中的前三個參數year、month和day是必需的。

 

from datetime import datetime

a = datetime(2021, 12, 12, 23, 59, 59, 123456)
print("年 =", a.year)
print("月 =", a.month)
print("時 =", a.hour)
print("分 =", a.minute)
print("時間戳 =", a.timestamp())

 

年 = 2021
月 = 12
日 = 12
時 = 23
分 = 59
時間戳 = 1639324799.123456

 

timedelta 對象表示了兩個日期時間之間的間隔差距。

 

from datetime import datetime, date

t1 = date(year = 2018, month = 7, day = 13)
t2 = date(year = 2021, month = 12, day = 12)
t3 = t1 - t2
print("t3 =", t3)

t4 = datetime(year = 2021, month = 12, day = 12, hour = 7, minute = 13, second = 59)
t5 = datetime(year = 2018, month = 7, day = 13, hour = 8, minute = 59, second = 18)
t6 = t4 - t5
print("t6 =", t6)

print("t3 的類型:", type(t3))
print("t6 的類型:", type(t6))

 

t3 = -1248 days, 0:00:00
t6 = 1247 days, 22:14:41
t3 的類型: <class 'datetime.timedelta'>
t6 的類型: <class 'datetime.timedelta'>

注意:t3 與 t6 都是 <class 'datetime.timedelta'> 類型。

 

from datetime import timedelta

t1 = timedelta(weeks = 2, days = 8, hours = 8, seconds = 23)
t2 = timedelta(days = 5, hours = 18, minutes = 4, seconds = 45)
t3 = t1 - t2

print("t3 =", t3)

 

t3 = 16 days, 13:55:38

在這裡,我們創建了兩個 timedelta 對象 t1 和 t2,它們的間隔差距如上列印在屏幕上。

 

from datetime import timedelta

t1 = timedelta(seconds = 45)
t2 = timedelta(seconds = 59)
t3 = t1 - t2

print("t3 =", t3)
print("t3 =", abs(t3))

 

t3 = -1 day, 23:59:46
t3 = 0:00:14

 

可以使用 total_seconds() 方法獲取 timedelta 對象中的總秒數。

from datetime import timedelta

t = timedelta(days = 5, hours = 1, seconds = 33, microseconds = 233423)
print("總秒數 =", t.total_seconds())

 

總秒數 = 435633.233423

你也可以使用 + 運算符查找兩個日期時間的總和。此外,還可以將 timedelta 對象乘除整數浮點數

 

在不同的地方、組織等,日期和時間的表示方式可能有所不同。在美國,使用 mm/dd/yyyy 更為常見,而在英國,使用 dd/mm/yyyy 更為常見。

Python 有 strftime() 和 strptime() 兩個方法來處理這個格式上的問題,如下:

 

strftime() 方法在類 date、datetime 和 time 下定義。該方法從給定的 date、datetime 或 time 對象創建並格式化為字符串

 

from datetime import datetime

# 當前的日期與時間
now = datetime.now()

t = now.strftime("%H:%M:%S")
print("時間:", t)

s1 = now.strftime("%m/%d/%Y, %H:%M:%S")
# mm/dd/YY H:M:S 格式
print("s1:", s1)

s2 = now.strftime("%d/%m/%Y, %H:%M:%S")
# dd/mm/YY H:M:S 格式
print("s2:", s2)

 

時間: 20:26:18
s1: 12/18/2021, 20:26:18
s2: 18/12/2021, 20:26:18

這裡,%Y,%m,%d,%H等是格式代碼。strftime() 方法接受一個或多個格式代碼,並基於它返回一個格式化字符串。

在上面的程序中,t、s1和s2 則是字符串

%Y - 年 [0001,..., 2018, 2019,..., 9999]

%m - 月 [01, 02, ..., 11, 12]

%d - 日 [01, 02, ..., 30, 31]

%H - 時 [00, 01, ..., 22, 23

%M - 分 [00, 01, ..., 58, 59]

%S - 秒 [00, 01, ..., 58, 59]

想要了解有關 strftime() 和格式代碼的更多內容,請後續閱讀:Python strftime()  

Tips1:見下一篇教程

 

strptime() 方法從給定字符串(表示日期和時間)創建 datetime 對象

 

from datetime import datetime

date_string = "13 June, 2021"
print("date_字符串 =", date_string)

date_object = datetime.strptime(date_string, "%d %B, %Y")
print("date_對象 =", date_object)

 

date_字符串 = 13 June, 2021
date_對象 = 2021-06-13 00:00:00

strptime() 方法接受兩個參數:

表示日期和時間的字符串;

格式化與第一個參數等效的代碼;

此處注意:%d、%B 和 %Y 格式代碼分別用於 day、month和 year。

想要了解關於此方法的更多內容,也可閱讀後續教程: Python strptime() 

Tips2:見下下一篇教程

 

假設你正在處理一個項目,需要根據其時區顯示日期和時間。在此建議使用第三方 pytZ 模塊,如下:

from datetime import datetime
import pytz

local = datetime.now()
print("本地時間:", local.strftime("%m/%d/%Y, %H:%M:%S"))

tz_NY = pytz.timezone('America/New_York')
datetime_NY = datetime.now(tz_NY)
print("美國|紐約時間:", datetime_NY.strftime("%m/%d/%Y, %H:%M:%S"))

tz_London = pytz.timezone('Europe/London')
datetime_London = datetime.now(tz_London)
print("歐洲|倫敦時間:", datetime_London.strftime("%m/%d/%Y, %H:%M:%S"))

 

本地時間: 12/18/2021, 20:34:10
美國|紐約時間: 12/18/2021 07:34:12
歐洲|倫敦時間: 12/18/2021 12:34:14

在這個程序中,datetime_NY和datetime_London是datetime對象,包含各自時區的當前日期和時間。

--


大家好,這是程序算法實驗室訂閱號歡迎各位關注!此處將持續分享關於Linux、DeepLearning、OpenCV、C++、SLAM、Python等技術乾貨。

👆 點擊識別並關注『程序算法實驗室』




相關焦點

  • Python基礎模塊:日期與時間模塊@time+datetime
    前段時間才哥主要在忙於工作和遊戲,以及準備肥家事宜(比如預約核酸)。終於,回家之後準備好好學習一下,從python基礎模塊開始,今天為大家準備的是python的日期與時間處理模塊time和datetime。
  • python 時間模塊 time datetime calendar複習與比較
    今天針對python庫自帶的三個時間模塊進行複習。。。。time模塊time模塊提供各種操作時間的函數由於time模塊是python自帶的,所以只需要簡單的import time就ok了獲取時間戳time.time()函數可以用來獲取當前時間的時間戳。
  • python基礎系列|示例講解時間模塊datetime
    Python 有很多種方式處理日期和時間,常見的時間處理的模塊是datetime、time、calendar。能融匯貫通的了解和使用這三個模塊,才能輕而易舉地用python處理時間。本文以此為目的,通過講述各個時間模塊的概述、函數及相關知識細節、以及相應的示例來講透它們的使用方式。
  • Python datetime指南:教你如何處理日期和時間(附試題+答案)
    是 Python 中處理日期的標準模塊,它提供了 4 種對日期和時間進行處理的主要對象:datetime、date、time 和 timedelta。datetime.time() 類何時以及如何使用 datetime.timedelta() 類時區問題14道練習題及參考答案datetime 簡介在 python 中,datetime 是對日期數據進行處理的主要模塊。
  • Python datetime 教程:操作時間、日期與時間跨度
    所幸,Python 提供了一種內置的方式來簡化這種操作:Python 的 Datetime 模塊。datetime 可以幫助我們識別並處理與時間相關的元素,如日期,小時,分鐘,秒,星期,月份,年份等。它提供了諸如時區和夏令時等很多服務。還可以處理時間戳數據,解析星期幾,每月幾號,以及從字符串格式化日期和時間等。
  • 13個知識點,系統整理Python時間處理模塊Datetime
    首先要介紹的,是大家平時用的較多的 datetime 模塊,它屬於 Python 的內置模塊,功能相對較全。針對 Datetime 模塊, 《Python時間使用指南》從構建時間對象實例、時間轉換、時間對象的運算三個方面進行了梳理,共涉及 13 個知識點,整理的大綱如下:datetime構建時間對象實例import datetime# from datetime import
  • 【Python基礎】13個知識點,系統整理Python時間處理模塊Datetime
    首先要介紹的,是大家平時用的較多的 datetime 模塊,它屬於 Python 的內置模塊,功能相對較全。針對 Datetime 模塊, 《Python時間使用指南》從構建時間對象實例、時間轉換、時間對象的運算三個方面進行了梳理,共涉及 13 個知識點,整理的大綱如下:datetime構建時間對象實例import datetime# from datetime import
  • Python 日期時間處理模塊學習筆記
    /python-datetime.html(點擊尾部閱讀原文前往)Python的時間處理模塊在日常的使用中用的不是非常的多,但是使用的時候基本上都是要查資料,還是有些麻煩的,梳理下,便於以後方便的使用。
  • 8000字:拿捏Python時間系列之datetime模塊
    公眾號:尤而小屋作者:Peter編輯:Peter大家好,我是Peter~在上篇Python或Pandas時間序列的文章中Peter詳細介紹了time模塊,本文中重點介紹的是datetime模塊。上一篇文章是:time模塊的講解,請參考:6大模塊拿下Python時間序列四、datetime模塊4.1主要類datetime模塊中包含的主要類為:date:日期對象,常用的屬性有year, month,
  • Python時間模塊四大必備知識點
    文 | 酷頭來源:印象python「ID: python_logic
  • python標準庫 datetime 日期的使用
    我們在工作過程中有時候會用到日期方面的計算,比如計算兩個日期之前的差,這需要用到python中的一個日期庫 date,今天我們就來認識一下這個庫的使用吧
  • python時間與日期處理一次看個夠(time、datetime、calendar)
    python中常常會遇見時間、日期相關的處理,python標準庫其實就提供了非常強大的處理能力,它們是time、datetime、calendar
  • 深入Python中的time和datetime模塊
    time和datetime是Python處理日期和時間的標準庫。在我們項目的實際開發當中使用率是非常高的。datetime模塊有四個重要的類,date,time,datetime,以及timedelta類,分別表示的是日期對象、時間對象、日期時間對象和時間差對象。
  • python中的時間處理模塊(二):datetime模塊之timedelta類詳解
    datatime模塊是在time模塊的基礎之上做了封裝,提供了更多更好用的類供我們使用,常用的有date、time、datetime、timedelta
  • 【萬字長文】詳解Python時間處理模塊-datetime
    類可以同時獲得日期和時間信息,datetime 對象是包含來自 date 對象和 time 對象的所有信息的單一對象。>日期時間對象, 如果可選參數 tz 為 None 或未指定,時間戳會被轉換為所在平臺的本地日期和時間,返回的 datetime 對象將為天真型。
  • Python 新手入門必學模塊之:datetime
    日期時間模塊 datetimedatetime 模塊提供了可以通過多種方式操作日期和時間的類。在支持日期時間數學運算的同時,實現更有效地解析屬性、格式化輸出和數據操作。常用的子類有 datetime 類和 timedelta 類。class datetime.datetime  日期和時間的結合。
  • 二十六、深入Python中的time和datetime模塊
    「@Author:Runsen」time和datetime是Python處理日期和時間的標準庫。在我們項目的實際開發當中使用率是非常高的。datetime模塊有四個重要的類,date,time,datetime,以及timedelta類,分別表示的是日期對象、時間對象、日期時間對象和時間差對象。時間戳時間戳是指格林威治時間1970年01月01日00時00分00秒(北京時間1970年01月01日08時00分00秒)起至現在的總秒數。
  • 第25天:Python datetime 和 time
    在前面的章節中已經介紹了一些 Python 常用的模塊,本節再介紹兩個模塊 datetime 模塊和 time 模塊,這兩個模塊主要用於轉換日期格式的功能。datetime模塊datetime 模塊是 Python 內置的功能模塊,它可以實現對日期的算數運算,以指定的方式格式化日期。
  • Python時間模塊,超實用總結!
    今天是Python時間模塊核心使用邏輯。本篇思維導圖如下:Python內置一個時間模塊datetime,提供我們關於時間的表達。記錄時間無所不在,日誌文件,程序運行起始時間和時長,銷量預測的特徵等等,我們都能看到時間的身影。
  • 用Python處理時間日期字符串的小結
    比較常見的就是解析syslog產生的日誌:需要解析字符串獲知日誌產生的時間。用到的地方挺多的,值得記錄一下。  %X 按照 (%H:%M:%S) 格式顯示當前時間,例如:「22:45:03」   %s 從 1970年1月1日0點0分0秒到現在歷經的秒數 (GNU擴充)實際使用樣例:"""XXXX Jun 19 22:45:03 XXXX"""   from datetime import datetime   month = "Jun"   day