相关文章推荐
飘逸的莲藕  ·  第6篇 WPF C# ...·  8 月前    · 
很拉风的红酒  ·  android webview ...·  1 年前    · 
Collectives™ on Stack Overflow

Find centralized, trusted content and collaborate around the technologies you use most.

Learn more about Collectives

Teams

Q&A for work

Connect and share knowledge within a single location that is structured and easy to search.

Learn more about Teams

I have a variable testeddate which has a date in text format like 4/25/2015. I am trying convert it to %Y-%m-%d %H:%M:%S as follows:

dt_str = datetime.strftime(testeddate,'%Y-%m-%d %H:%M:%S')

but I am running into this error:

TypeError: descriptor 'strftime' requires a 'datetime.date' object but received a 'Text'

How do I resolve this?

datetime.strftime is not a static method, you need to call it on an actual datetime object: docs.python.org/2/library/datetime.html#datetime.date.strftime – jonny May 7, 2015 at 22:01 @user2125827: First, yes, technically, you can write datetime.datetime.strftime(dt, fmt) instead of dt.strftime(fmt), just like you can write str.encode(s, encoding) instead of s.encode(encoding). But it's more idiomatic, more readable, and more concise to write dt.strftime(fmt). And, more importantly, you don't actually have a datetime in the first place, you seem to be mixing up strftime (f for format) and strptime (p for parse); they're opposites. – abarnert May 7, 2015 at 22:15

You have a Text object. The strftime function requires a datetime object. The code below takes an intermediate step of converting your Text to a datetime using strptime

import datetime
testeddate = '4/25/2015'
dt_obj = datetime.datetime.strptime(testeddate,'%m/%d/%Y')

At this point, the dt_obj is a datetime object. This means we can easily convert it to a string with any format. In your particular case:

dt_str = datetime.datetime.strftime(dt_obj,'%Y-%m-%d %H:%M:%S')

The dt_str now is:

'2015-04-25 00:00:00'
                Or can use just: dt_str = datetime.strptime(testeddate,'%m/%d/%Y').strftime('%Y-%m-%d %H:%M:%S') , assuming that the import is: from datetime import datetime
– Raphael Amoedo
                May 7, 2015 at 22:11
                I get an error AttributeError: type object 'datetime.datetime' has no attribute 'datetime' at line dt_obj = datetime.datetime.strptime(testeddate,'%m/%d/%Y')
– carte blanche
                May 7, 2015 at 22:26
                What is your import statement? If you are just going import datetime it will work as I have it. If you are doing from datetime import datetime change that line to dt_obj = datetime.strptime(testeddate,'%m/%d/%Y')
– Andy
                May 7, 2015 at 22:27
                You are putting in the first place the object and in the second one the format and works. However, I saw everywhere else that first comes the format and then the object strftime("%a, %d %b %Y %H:%M:%S +0000", gmtime())and I was getting an error all the time. What am I missing?
– J0ANMM
                Oct 14, 2016 at 10:52

A less elegant solution would involve manipulating the string directly.

testeddate = '4/25/2015'
month, day, year = testeddate.split('/')
testeddate = '-'.join([year, month, day]) + ' 00:00:00'

The error message you're encountering, TypeError: descriptor 'strftime' requires a 'datetime.date' object but received a 'Text', indicates that the strftime method is expecting a datetime.date object, but you're providing it with a text string.

To resolve this, you first need to convert the text string into a datetime.date object before using the strftime method.

from datetime import datetime
testeddate = '4/25/2015'
# Convert the string to a datetime object i.e,
# converted to datetime.datetime(2015, 4, 25, 0, 0)
datetime_obj = datetime.strptime(testeddate, '%m/%d/%Y')
# Format the datetime object as a string
formatted_date = datetime_obj.strftime('%Y-%m-%d %H:%M:%S')
print(formatted_date)

This code will output:

2015-04-25 00:00:00
        

Thanks for contributing an answer to Stack Overflow!

  • Please be sure to answer the question. Provide details and share your research!

But avoid

  • Asking for help, clarification, or responding to other answers.
  • Making statements based on opinion; back them up with references or personal experience.

To learn more, see our tips on writing great answers.