簡體   English   中英

如何比較 python 中的日期? 我有月份日期年份格式並想與當前日期(7 天內)進行比較

[英]How to compare date in python? I have a month date year format and want to compare to the current date (within 7 days)

這是從我的 API 返回的數據:

"Jun 02, 2021, 2 PMEST"

如果我在通過這樣做得到的當前日期的 7 天內:

from datetime import date

today = date.today()
print("Today's date:", today)

只需要將Jun轉換為數字和02比較一下是否在當前日期的未來7天內,然后返回True

方法 0:

給定示例數據的格式,您應該能夠使用以下代碼將其轉換為datetime時間:

datetime.strptime("Jun 02, 2021, 2 PMEST", "%b %d, %Y, %I %p%Z")

有關此格式字符串的詳細信息在這里: https://docs.python.org/3/library/datetime.html#strftime-strptime-behavior

但是,當我在本地對此進行測試時,它適用於以下輸入:

"Jun 02, 2021, 2 PMUTC"

但不適用於您的輸入(具有不同的時區):

"Jun 02, 2021, 2 PMEST"

我對此進行了更多調查並“閱讀了文檔”( https://docs.python.org/3/library/time.html )。 要使EST解析正常工作,您必須更改操作系統時區並重置time模塊的時區,如下所示:

from datetime import datetime
import os
import time

os.environ["TZ"] = "US/Eastern".  # change timezone
time.tzset().                     # reset time.tzname tuple
datetime.strptime("Jun 02, 2021, 2 PMEST", "%b %d, %Y, %I %p%Z")  

完成后,請注意安全並刪除“被黑”環境變量:

del os.environ["TZ"]

注意 - 由於您的系統時區可能仍然是UTC ,它仍然可以解析 UTC 時區。

有關詳細討論,請參閱此線程: https://bugs.python.org/issue22377

另請注意,實際上並未捕獲時間戳。 使用ESTUTC得到的結果是一個天真的日期時間 object。

方法 1

所以,似乎有更好的方法來解決這個問題。 首先,如果您還沒有pip install dateutils它。 然后做這樣的事情:

from dateutil import parser
from dateutil.tz import gettz

tzinfos = {"EST": gettz("US/Eastern")}

my_datetime = parser.parse("Jun 02, 2021, 2 PM EST", tzinfos=tzinfos)

這里發生的是我們使用gettzusr/share/zoneinfo中列出的時區獲取時區信息。 然后parse function 可以(模糊)解析您的字符串(無需指定格式!)並返回my_datetime ,其中包含時區信息。 以下是解析器文檔: https://dateutil.readthedocs.io/en/stable/parser.html

我不知道您需要處理多少個不同的時區,所以 rest 由您決定。 祝你好運。

將日期轉換為datetime時間結構並取直接差異。 請注意, today也必須是datetime

import datetime
date_string = "Jun 02, 2021, 2 PMEST"
today = datetime.datetime.today()
date = datetime.datetime.strptime(date_string, 
                                  "%b %d, %Y, %I %p%Z") # Corrected
(date - today).days
#340

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM