我想獲取 date1 和 date2 的用戶輸入并計算差異以確定兩者之間的周數。我的整個程式如下。我使用的示例日期是:
日期1 = 2023-03-15
日期 2 = 2022-11-09
輸出是Number of weeks: 18- 這是正確的。
我需要幫助澄清的第一個問題是為什么我需要.days在days = abs(date2-date1).days? 我已經通過 Google、stackoverflow、Youtube 和 Python 檔案https://docs.python.org/3.9/library/datetime.html?highlight=datetime#module-datetime搜索了很多小時。我對 Python 很陌生,閱讀檔案有時會讓我感到困惑,所以如果它在那里,請原諒——我一直在努力閱讀其中的一些內容。為什么.days需要?我知道如果我洗掉.days,輸出是:Number of weeks: 18 days, 0:00:00。.days需要日期時間模塊檔案中列出的檔案在哪里???有人可以幫我理解嗎?
我的第二個問題是為什么Number of weeks: 0當我更改.days為時會得到.seconds?(這是我測驗東西并注釋掉weeks = days//7并列印出來的時候days)我認為檔案中的一部分解決了以下問題:https ://docs.python.org/3.9/library/datetime.html?highlight= datetime#module-datetime:~:text=the given year.-,Supported operations:,!=. The latter cases return False or True, 分別.,-In Boolean contexts .... 如果這是正確的,我是否正確地閱讀它,如果要確定日期的差異,則只回傳“天”,因此沒有秒或微秒?
謝謝您的幫助!下面的代碼:
#Find the number of weeks between two given dates
from datetime import datetime
#User input for 1st date in YYYY-MM-DD format
date1 = input("Enter 1st date in YYYY-MM-DD format: ")
date1 = datetime.strptime(date1, "%Y-%m-%d")
#User input for 2nd date in YYYY-MM-DD format
date2 = input("Enter 2nd date in YYYY-MM-DD format: ")
date2 = datetime.strptime(date2, "%Y-%m-%d")
#Calculate the weeks between the 2 given dates
days = abs(date2-date1).days
weeks = days//7
print("Number of weeks: ", weeks)
輸出正確答案,.days包括:
Enter 1st date in YYYY-MM-DD format: 2023-03-15
Enter 2nd date in YYYY-MM-DD format: 2022-11-09
Number of weeks: 18
輸出 - 不.days添加:
Enter 1st date in YYYY-MM-DD format: 2023-03-15
Enter 2nd date in YYYY-MM-DD format: 2022-11-09
Number of weeks: 18 days, 0:00:00
輸出-(關于第二個問題,用.seconds代替.days:
Enter 1st date in YYYY-MM-DD format: 2023-03-15
Enter 2nd date in YYYY-MM-DD format: 2022-11-09
Number of weeks: 0
uj5u.com熱心網友回復:
減去兩個datetime.datetime物件回傳一個datetime.timedelta物件:
>>> date1 = datetime.strptime('2023-03-15', "%Y-%m-%d")
>>> date2 = datetime.strptime('2022-11-09', "%Y-%m-%d")
>>> date2-date1
datetime.timedelta(days=-126)
>>>
從檔案:
內部僅存盤天、秒和微秒。引數被轉換為這些單位:
一毫秒轉換為 1000 微秒。
一分鐘轉換為 60 秒。
一小時轉換為 3600 秒。
一周轉換為 7 天。
這是datetime.timedelta物件的一些示例用法。所以對于你的第二個問題,我相信你是對的;對于兩天之間的差異,沒有.seconds,因為嚴格來說是天的差異。為了.seconds不為零,我想你必須有一些大于 1,000,000 微秒但小于 86,400 秒的差異分量。
uj5u.com熱心網友回復:
TL;DR:你的兩個問題的答案都是“因為這是datetime.timedelta類的屬性”。
更全面地說,您在代碼中創建的 date1 和 date2 物件都是datetime.datetime該類的實體。它們之間的-操作會生成一個 timedelta 物件。
- 為什么
.days需要避免列印“, 0:00:00”?
默認情況下,您使用操作創建的 timedelta 物件中的所有日期資訊都會abs(date2-date1)被列印(包括秒和微秒,即使在使用//7操作修改后也是如此)。使用.運算子時,您訪問daystimedelta 物件的屬性,并且僅使用該屬性的值。
.days當我更改為時,為什么會得到“周數:0”.seconds?
seconds您使用該操作創建的 timedelta 物件的屬性值abs(date2-date1)是 integer 0。
見下文:
>>> from datetime import datetime
>>> date1 = "2023-03-15"
>>> date1, type(date1)
('2023-03-15', <class 'str'>)
>>> date1 = datetime.strptime(date1, "%Y-%m-%d")
>>> date1, type(date1)
(datetime.datetime(2023, 3, 15, 0, 0), <class 'datetime.datetime'>)
>>> date2 = "2022-11-09"
>>> date2, type(date2)
('2022-11-09', <class 'str'>)
>>> date2 = datetime.strptime(date2, "%Y-%m-%d")
>>> date2, type(date2)
(datetime.datetime(2022, 11, 9, 0, 0), <class 'datetime.datetime'>)
>>> abs(date2-date1), type(abs(date2-date1))
(datetime.timedelta(days=126), <class 'datetime.timedelta'>)
>>> abs(date2-date1).days, type(abs(date2-date1).days)
(126, <class 'int'>)
>>> abs(date2-date1).seconds, type(abs(date2-date1).seconds)
(0, <class 'int'>)
另請參閱:此討論。
uj5u.com熱心網友回復:
準確地說,您以 7 天為間隔計算差異,但一周實際上是從星期一(或星期日)開始到星期日(或星期一)結束的時間段。因此,2022 年 10 月 1 日(星期六)和 2022 年 10 月 4 日(星期二)在一年中的幾周之間的差異為 1,但天數為 3(在您的情況下為 0 7 天間隔)。
因此,如果您需要在一年中的幾周內找到兩個日期之間的距離,則必須考慮作業日:
from datetime import date
d1 = date(2022,10,18)
d2 = date(2022,10,5)
w1 = d1.weekday()
w2 = d2.weekday()
# dfference in weeks of year = 2
((d1-d2).days - (w1-w2))/7 # 2.0
# difference in days = 13
d1-d2 # datetime.timedelta(days=13)
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/512102.html
