Не удается преобразовать дату с часовым поясом в настраиваемый

#python #datetime

#python #дата и время

Вопрос:

Я пытаюсь преобразовать даты из 2016-04-30T00:00:00Z 2016-04-30 в. Я получаю успех от первых двух. Однако, в случае последнего, я получаю ValueError: time data '2021-12-31T15:28:43.040Z' does not match format '%Y-%m-%dT%H:%M:%SZ' . Как я могу это исправить?

Я пробовал с:

 from datetime import datetime

date_list = [
    '2016-04-30T00:00:00Z',
    '2007-10-31T00:00:00Z',
    '2021-12-31T15:28:43.040Z'
]

for raw_date in date_list:
    _date = datetime.strptime(raw_date, '%Y-%m-%dT%H:%M:%SZ').strftime('%Y-%m-%d')
    print(_date)
 

Комментарии:

1. Если даты совпадают, просто используйте raw_date[:10]

2. ‘2021-12-31T15:28:43.040Z’ будет ‘%Y-%m-% dT%H:%M:%S.% f%z’.

Ответ №1:

Быстрое исправление, я сделаю это.

 for raw_date in date_list:
    _date = datetime.strptime(raw_date.split('T')[0], '%Y-%m-%d').strftime('%Y-%m-%d')
    print(_date)
 

или

 for raw_date in date_list:
    _date = raw_date.split('T')[0]
    print(_date)
 

Ответ №2:

Если вы можете использовать вызываемую библиотеку pandas , это было бы намного проще:

 from pandas import to_datetime
date_list = [
    '2016-04-30T00:00:00Z',
    '2007-10-31T00:00:00Z',
    '2021-12-31T15:28:43.040Z'
]
print(to_datetime(date_list).strftime('%Y-%m-%d'))
 

Если у вас нет этой библиотеки, попробуйте это:

 date_list = [
    '2016-04-30T00:00:00Z',
    '2007-10-31T00:00:00Z',
    '2021-12-31T15:28:43.040Z'
]

for raw_date in date_list:
    _date = raw_date.split('T')[0]
    print(_date)