如何使用Python確定上週五的日期?


在這篇文章中,我們將學習如何使用Python確定上週五的日期。

使用的方法

以下是完成此任務的各種方法:

  • 使用 datetime 模組

  • 使用 dateutil 包

方法1:使用 Datetime 模組

演算法(步驟)

以下是執行所需任務的演算法/步驟:

  • 使用 import 關鍵字從 datetime 模組匯入 **datetime, timedelta**。

  • 建立一個變數來儲存一週中的所有日期 **(weekdays)**。

  • 建立一個函式 **getPreviousByDay()**,透過接受輸入日期、start_date=None作為引數來返回輸入日期的最後一天。

  • 使用 **if 條件** 語句檢查開始日期是否為 None。

  • 將今天的日期(當前日期)分配給開始日期。

  • 使用 datetime 模組的 **weekday()** 函式(返回與給定一週中的某一天對應的整數)獲取當前星期幾的數字。

  • 使用 index() 函式獲取目標星期幾(給定的輸入日期)的索引。

  • 獲取上週的天數。

  • 使用 **if 條件** 語句檢查上述 days_ago 變數的結果是否等於 0,如果是,則將 7 分配給 days_ago 變數。

  • 否則,從當前日期(開始日期)減去上述天數,以獲取給定日期上週的日期。

  • 返回輸入日期上週的日期。

  • 使用 datetime 的 today() 函式列印今天的/當前日期和時間。

  • 透過將 inputDay 作為 'Friday' 傳遞給上面定義的 **getPreviousByDay()** 函式來列印上週五的日期。

  • 同樣地,透過將輸入日期作為 **'Monday' 和 'Wednesday' 傳遞給 getPreviousByDay()** 函式來列印上週一和上週三的日期。

示例

以下程式使用 **datetime 模組** 返回確定上週五/任意一天的日期:

# importing datetime, timedelta from datetime module
from datetime import datetime, timedelta
# list of days in a week
weekdaysList = ['Monday', 'Tuesday', 'Wednesday', 'Thursday',
                'Friday', 'Saturday', 'Sunday']
# creating a function to return the last weekday of input day by
# accepting the input day, start_date=None as arguments
def getPreviousByDay(inputDay, start_date=None):
   # check whether the start date is None
      if start_date is None:
         # assiging today's date(current date) to the start date
         start_date = datetime.today()
         # getting the weekday number
         dayNumber = start_date.weekday()
         # Get the index of the target weekday
         dayNumberTarget = weekdaysList.index(inputDay)
         # getting the last weekday
         daysAgo = (7 + dayNumber - dayNumberTarget) % 7
      # checking whether the above days ago result is equal to 0
      if daysAgo == 0:
         # assigning 7 to the days ago
         daysAgo = 7
      # Subtract the above number of days from the current date(start date)
      # to get the last week's date of the given day
      targetDate = start_date - timedelta(days=daysAgo)
      # returning the last week's date of the input date
      return targetDate

# printing today's/current date and time
print("Current date and time:", datetime.today())
# printing the last Friday date by calling the above defined
# getPreviousByDay() function by passing inputDay as 'Friday' as an argument
print("Last Friday Date:", getPreviousByDay('Friday'))
# printing the last Monday date
print("Last Monday Date:", getPreviousByDay('Monday'))
# printing the last Wednesday date
print("Last Wednesday Date:", getPreviousByDay('Wednesday'))

輸出

執行上述程式將生成以下輸出:

Current date and time: 2023-01-01 08:15:35.935826
Last Friday Date: 2022-12-30 08:15:35.936020
Last Monday Date: 2022-12-26 08:15:35.936153
Last Wednesday Date: 2022-12-28 08:15:35.936264

方法2:使用 Dateutil 包

在此程式碼中,**開始日期** 和 **目標日期** 對映到它們在星期中對應的數字位置(以星期一為第 **0** 天)。然後,使用模算術來確定自 **目標日期** 上次出現以來已經過去了多少天。

然後透過從適當的 timedelta 例項中減去開始日期來確定目標日期。

如果您經常執行此類日期計算,則安裝 **python-dateutil** 包可能更好。

這是一個使用 dateutil 的 **relativedelta()** 函式進行相同計算的示例。

**dateutil.relativedelta.relativedelta** 支援根據年份、月份、周或天定義的週期,以及為年份、月份或天定義絕對值的能力,而 **timedelta** 僅支援天(和周)。

示例

以下程式使用 **dateutil 模組** 返回確定上週五和下週五的日期:

# importing datetime from datetime module
from datetime import datetime
# importing relativedelta from dateutil module
from dateutil.relativedelta import relativedelta
from dateutil.rrule import *
# taking the start date as the current date
start_date = datetime.now()
# printing the todays/current date and time
print("Current Date:", start_date)
# printing the Next Friday date
print("Next Friday Date:", start_date + relativedelta(weekday=FR))
# printing the Last Friday date
print("Last Friday Date:", start_date + relativedelta(weekday=FR(-1)))

輸出

執行上述程式將生成以下輸出:

Current Date: 2023-01-15 08:19:49.267666
Next Friday Date: 2023-01-20 08:19:49.267666
Last Friday Date: 2023-01-13 08:19:49.267666

結論

在這篇文章中,我們學習瞭如何使用兩種不同的方法在 Python 中獲取上週五的日期。我們還實踐瞭如何獲取給定輸入日的上一個工作日,以及如何獲取給定日的下一個工作日。

更新於:2023年1月24日

3K+ 次瀏覽

啟動您的 職業生涯

透過完成課程獲得認證

開始
廣告
© . All rights reserved.