web-dev-qa-db-ja.com

TypeError:「>」は「datetime.datetime」と「str」のインスタンス間ではサポートされていません

python日付と時刻のタイプは初めてです。

日付の値があります。

date = '2018-11-10 10:55:31+00:00'

この日付の値が90日より古いことを確認する必要があります。

私は試した :

from datetime import datetime
from datetime import timedelta

past = datetime.now() - timedelta(days=90)
date = '2018-11-10 10:55:31+00:00'

if past > date :
   print("This is older than 90 days")

次のエラーで失敗しました:
TypeError: '>' not supported between instances of 'datetime.datetime' and 'str'

これは、「過去」の日付形式と渡した日付値が異なるためと考えられます。

どうすればこれを思い付きますか?

5
Ebin Davis

dateutilパッケージを使用して、日付文字列dateを `datetimeオブジェクトに変換し、次のコマンドで条件を確認できます。

from dateutil import parser
past = datetime.now() - timedelta(days=90)
new_date = parser.parse("2018-11-10 10:55:31+00:00")
if past > new_date :
    print("This is older than 90 days")

そのこと : )

1
ddor254

日付文字列をdatetimeに変換する必要があります。いくつかの方法でこれを行うことができます。

組み込みdatetime.strptimeを使用する

たとえば、比較の前にまずdatetimeに変換します。これには、事前にフォーマットを正確に指定する必要があります。

date = '2018-11-10 10:55:31+00:00'
date = datetime.strptime(date[:-6], '%Y-%m-%d %H:%M:%S')

print(date)

datetime.datetime(2018, 11, 10, 10, 55, 31)

サードパーティのライブラリを使用する

人気のあるツールの1つは dateutil.parser です。これは、最も一般的な日時形式を解析できますなし事前に指定された形式:

from datetime import datetime, timedelta
from dateutil import parser

past = datetime.now() - timedelta(days=90)
date1 = '2018-11-10 10:55:31+00:00'
date2 = '2017-11-10 10:55:31+00:00'

for date in (date1, date2):
    if past > parser.parse(date[:-6]):
        print(f'This is older than 90 days: {date}')

This is older than 90 days: 2017-11-10 10:55:31+00:00
1
jpp