user1579970
user1579970

Reputation: 379

Date Time Formats in Python

What are these date-time formats? I need to convert them to the same format, to check if they are the same. These are just two coming from a separate data source, so I need to find a way to make them the same format. Any ideas?

Thanks in advance

Upvotes: 33

Views: 159335

Answers (5)

Sudipta
Sudipta

Reputation: 4971

That extra .000 is micro seconds.

This will convert a date string of a format to datetime object.

import datetime
d1 = datetime.datetime.strptime("2013-07-12T07:00:00Z","%Y-%m-%dT%H:%M:%SZ")
d2 = datetime.datetime.strptime("2013-07-10T11:00:00.000Z","%Y-%m-%dT%H:%M:%S.%fZ")

Then convert them into any format depending on your requirement, by using:

new_format = "%Y-%m-%d"
d1.strftime(new_format)

Upvotes: 67

Uday Kiran
Uday Kiran

Reputation: 729

use datetime module.

For a variable

import datetime
def convertDate(d):
     new_date = datetime.datetime.strptime(d,"%Y-%m-%dT%H:%M:%S.%fZ")
     return new_date.date()
convertDate("2019-12-23T00:00:00.000Z")

you can change the ".date()" to ".year", ".month", ".day" etc...

Output: # is now a datetime object

datetime.date(2019, 12, 23)

For a DataFrame column, use apply()

df['new_column'] = df['date_column'].apply(convertDate)

Upvotes: 3

Amrit Prasad
Amrit Prasad

Reputation: 427

* Short and best way:

str(datetime.datetime.now()).replace(' ','T')
or
str(datetime.datetime.now()).replace(' ','T') + "Z"

Upvotes: 0

monkut
monkut

Reputation: 43830

perhaps use .isoformat()

string in ISO 8601 format, YYYY-MM-DDTHH:MM:SS[.mmmmmm][+HH:MM]

>>> import datetime
>>> datetime.datetime.utcnow().isoformat() + "Z"
'2013-07-11T22:26:51.564000Z'
>>>

Z specifies "zulu" time or UTC.

You can also add the timezone component by making your datetime object timezone aware by applying the appropriate tzinfo object. With the tzinfo applied the .isoformat() method will include the appropriate utc offset in the output:

>>> d = datetime.datetime.utcnow().replace(tzinfo=datetime.timezone.utc)
>>> d.isoformat()
'2019-11-11T00:52:43.349356+00:00'

You can remove the microseconds by change the microseconds value to 0:

>>> no_ms = d.replace(microsecond=0)
>>> no_ms.isoformat()
'2019-11-11T00:52:43+00:00'

Also, as of python 3.7 the .fromisoformat() method is available to load an iso formatted datetime string into a python datetime object:

>>> datetime.datetime.fromisoformat('2019-11-11T00:52:43+00:00')
datetime.datetime(2019, 11, 11, 0, 52, 43, tzinfo=datetime.timezone.utc)

http://www.ietf.org/rfc/rfc3339.txt

Upvotes: 13

you can try to trim the string

data = "2019-10-22T00:00:00.000-05:00"
result1 = datetime.datetime.strptime(data[0:19],"%Y-%m-%dT%H:%M:%S")
result2 = datetime.datetime.strptime(data[0:23],"%Y-%m-%dT%H:%M:%S.%f")
result3 = datetime.datetime.strptime(data[0:9], "%Y-%m-%d")

Upvotes: 6

Related Questions