1. ホーム
  2. python

[解決済み] Python - 昨日の日付をYYYY-MM-DD形式の文字列として取得する

2022-02-18 11:30:10

質問内容

APIリクエストの入力として、昨日の日付を以下のフォーマットで文字列として取得する必要があります。 YYYY-MM-DD . 私はそれが動作しているバージョンを持っています。

yesterday = datetime.date.fromordinal(datetime.date.today().toordinal()-1)
report_date = str(yesterday.year) + \
   ('-' if len(str(yesterday.month)) == 2 else '-0') + str(yesterday.month) + \
   ('-' if len(str(yesterday.day)) == 2 else '-0') + str(yesterday.day)

これを行うにはもっとエレガントな方法があるはずです。

解決方法は?

今日の日付から1日引くだけでいいんです。Pythonの場合 datetime.timedelta オブジェクトを使用すると、特定の時間スパンを timedelta オブジェクト .

datetime.timedelta(1) は、1日分の期間を示し、1日分の期間から減算することができます。 datetime オブジェクトを作成します。オブジェクトを引き算した後、次のように使うことができます。 datetime.strftime に基づいて、日付オブジェクトである結果を文字列に変換しています。 選択したフォーマット :

>>> from datetime import datetime, timedelta
>>> yesterday = datetime.now() - timedelta(1)

>>> type(yesterday)                                                                                                                                                                                    
>>> datetime.datetime    

>>> datetime.strftime(yesterday, '%Y-%m-%d')
'2015-05-26'

を呼び出す代わりに datetime.strftime 関数を直接使用することもできます。 strftime メソッドの datetime オブジェクトを作成します。

>>> (datetime.now() - timedelta(1)).strftime('%Y-%m-%d')
'2015-05-26'

機能として

def yesterday(string=False, frmt='%Y-%m-%d'):
    yesterday = datetime.now() - timedelta(1)
    if string:
        return yesterday.strftime(frmt)
    return yesterday