sr19 sr19
sr19 sr19

Reputation: 53

How to strip date time in python

From a website I'm getting a date in such format: Sun Jan 22 21:32:58 +0000 2012. I understand that I must get rid of +0000 to convert it to the date, but how exactly I can do it? I read the documentation but my code is not working:

from datetime import datetime
strDate = 'Mon Apr 29 14:30:53 2019'
objDate = datetime.strptime(strDate, '%a %b %H %M %S %Y')

I'm getting an error:

ValueError: time data 'Mon Apr 29 14:30:53 2019' does not match format '%d %m %H %M %S %Y'

And I don't really understand why. Or anyone knows how I can get a date from Sun Jan 22 21:32:58 +0000 2012?

Upvotes: 4

Views: 39586

Answers (6)

alkanen
alkanen

Reputation: 655

I'm afraid that the currently accepted answer, by seralouk, is incorrect. Using "+%f" turns the numbers into fractions of seconds. It's fine for 0000, but will mess things up if they happen to be anything else.

This is because the "+0000" part is a time zone offset, and the proper way to parse it is by using the "%z" directive, which will handle the "+" sign as well, so remove that from the format string:

>>> date_string = "Sun Jan 22 21:32:58 +0000 2012"
>>> datetime.strptime(date_string, "%a %b %d %H:%M:%S %z %Y")
datetime.datetime(2012, 1, 22, 21, 32, 58, tzinfo=datetime.timezone.utc)

Upvotes: 2

drGabriel
drGabriel

Reputation: 808

If your object is datetime.datetime you can just simply do date()

from datetime import datetime
datetime1 = datetime.now() 
date1 = datetime1.date()

Upvotes: 3

seralouk
seralouk

Reputation: 33147

One line solution:

strDate ='Sun Jan 22 21:32:58 +0000 2012'
objDate = datetime.strptime(strDate, '%a %b %d %H:%M:%S +%f %Y')

print(objDate)
#2019-04-29 14:30:53

Details:

You just forgot to use %d in order to capture the date number and the : for the time and you ALSO need to capture +0000.

Proof:

enter image description here

Upvotes: 0

Ruben FV
Ruben FV

Reputation: 146

You can get rid of the '+0000' like this:

from datetime import datetime
strDate ='Sun Jan 22 21:32:58 +0000 2012' 
objDate = datetime.strptime(strDate.replace(strDate.split(" ")[4] + " ", ""), '%a %b %d %H:%M:%S %Y')

print(objDate)
-> 2012-01-22 21:32:58

By the way,

1. The example of code that you post is not the one for the problem that you are asking about! (it does not include the +0000 in the string).

2. The error that you share (false format of the date, which has been answered already and described f.ex. here) is for another code, not the one you present above! (Error throws '%d %m %H %M %S %Y' instead of '%a %b %H %M %S %Y').

Upvotes: 0

RuntimeError
RuntimeError

Reputation: 34

In your string u are missing the %d to catch the Day of month 01-31

'%a %b %d %H:%M:%S %Y'

If u want also to catch the +0000 u have to use the %z notation

Use this as a refrence to build your string correctly: http://strftime.org/

Upvotes: -1

That1Guy
That1Guy

Reputation: 7233

You're missing colons : and the day format string %d. See the official documentation of strptime for a table that shows the different formatting values.

from datetime import datetime
strDate = 'Mon Apr 29 14:30:53 2019'
objDate = datetime.strptime(strDate, '%a %b %d %H:%M:%S %Y')

Upvotes: 0

Related Questions