Я пытаюсь изменить дату, которая находится в строковом формате, на формат даты в python

#python #selenium

#python #selenium

Вопрос:

Я написал код, как показано ниже:

 from datetime import datetime

datetime_str = '19/09/2021'

datetime_object = datetime.strptime(datetime_str, '%d/%m/%Y').date()

print(type(datetime_object))
print(datetime_object)
 

Я получаю вывод, как показано ниже:

 (venv) D:pythonProjectpractice>py test1.py
<class 'datetime.date'>
2021-09-19
 

Здесь формат даты меняется на 2021-09-19

Мне нужен тот же формат, что и ’19/09/2021′ в типе даты

Я попытался изменить формат, как показано ниже:

 newformat = datetime_object.strftime('%d/%m/%Y')
print(newformat)
print(type(newformat))
 

Но newformat имеет строковый тип. Не могли бы вы, пожалуйста, помочь мне решить эту проблему?

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

1. внутренний способ, которым объект datetime хранит дату, для вас не имеет значения. strftime возвращает строковое представление объекта datetime в соответствии с заданным вами форматированием, поэтому newformat это строка

Ответ №1:

Эта строка будет делать:

 print(datetime_object.strftime("%d/%m/%Y "))
 

Ответ №2:

На самом print(datetime_object) деле вызывает datetime.datetime.__str__() функцию. Она определена в классе datetime.datetime (исходный код). По умолчанию он возвращает isoformat.

Если вы хотите изменить print(datetime_object) , вы можете использовать наследование для создания нового класса, производного от интересующего класса, а затем переопределить __str__ метод. Затем вы определяете свой datetime_object, используя свой новый класс.

 class mydatetime(datetime):
    def __str__(self):
        return self.strftime('%d/%m/%Y')
mydatetime_object = mydatetime.strptime(datetime_str, '%d/%m/%Y')
print(type(mydatetime_object))
print(mydatetime_object)
 

Вы можете ожидать, что получите:

 <class '__main__.mydatetime'>
19/09/2021
 

Функция strftime() преобразует объект datetime.datetime в строку, поэтому вы получаете строку вместо объекта datetime.datetime.