Many timestamps have an implied timezone. To ensure that your code will work in every timezone, you should use UTC internally and attach a timezone each time a foreign object enters the system.
Python 3.2+:
>>> datetime.datetime.strptime[
... "March 5, 2014, 20:13:50", "%B %d, %Y, %H:%M:%S"
... ].replace[tzinfo=datetime.timezone[datetime.timedelta[hours=-3]]]
This assumes you know the offset. If you don't, but you know e.g. the location, you can use the pytz
package to query the IANA time zone database for the
offset. I'll use Tehran here as an example because it has a half-hour offset:
>>> tehran = pytz.timezone["Asia/Tehran"]
>>> local_time = tehran.localize[
... datetime.datetime.strptime["March 5, 2014, 20:13:50",
... "%B %d, %Y, %H:%M:%S"]
... ]
>>> local_time
datetime.datetime[2014, 3, 5, 20, 13, 50, tzinfo=]
As you can see, pytz
has determined that the offset was +3:30 at that particular date. You can now convert this to UTC time, and it will apply the offset:
>>> utc_time = local_time.astimezone[pytz.utc]
>>> utc_time
datetime.datetime[2014, 3, 5, 16, 43, 50, tzinfo=]
Note that dates before the adoption of timezones will give you weird offsets. This is because the IANA has decided to use Local Mean Time:
>>> chicago = pytz.timezone["America/Chicago"]
>>> weird_time = chicago.localize[
... datetime.datetime.strptime["November 18, 1883, 11:00:00",
... "%B %d, %Y, %H:%M:%S"]
... ]
>>> weird_time.astimezone[pytz.utc]
datetime.datetime[1883, 11, 18, 7, 34, tzinfo=]
The weird "7 hours and 34 minutes" are derived from the longitude of Chicago. I used this timestamp because it is right before standardized time was adopted in Chicago.
The strptime[] method is available under datetime and time modules to parse the string to datetime and time objects.
To convert string to datetime in Python, use the strptime[] method. The strptime[] is a built-in method of datetime class used to convert a string representation of the date/time to a datetime object.
Syntax
datetime.strptime[date_string, format]
Parameters
The strptime[] function takes both mandatory arguments and should be a string. The strptime[] function is exactly the opposite of the strftime[] function, which converts a datetime object to a string.
Example
# app.py from datetime import datetime dt_str = '27/10/20 05:23:20' dt_obj = datetime.strptime[dt_str, '%d/%m/%y %H:%M:%S'] print["The type of the date is now", type[dt_obj]] print["The date is", dt_obj]
Output
The type of the date is now The date is 2020-10-27 05:23:20
The datetime.strptime[] is a general method for parsing strings into datetimes. It can handle all sorts of formats, with the format defined by the format string you give.
Converting string to datetime using dateutil
The dateutil can be installed from PyPI using the pip package manager. Import the dateutil package and use the parser module to convert string to datetime.
# app.py from dateutil import parser dt_str = '27/10/20 05:23:20' dt_obj = parser.parse[dt_str] print["The type of the date is now", type[dt_obj]] print["The date is", dt_obj]
Output
The type of the date is now The date is 2020-10-27 05:23:20
Python String to date object
To convert string to date object in Python, use the date[] function with the strptime[] function.
# app.py from datetime import datetime date_str = '10-27-2020' dto = datetime.strptime[date_str, '%m-%d-%Y'].date[] print[type[dto]] print[dto]
Output
2020-10-27
The strptime[] function will not work if the string argument is not consistent with the format parameter.
How to set locale in Python
To set a locale in Python, import the locale package in your program and then use the locale.setlocale[] method to set the locale.
# app.py import locale from datetime import datetime locale.setlocale[locale.LC_ALL, 'es_ES'] date_str_es = '27-Octubre-2020' # es_ES locale datetime_object = datetime.strptime[date_str_es, '%d-%B-%Y'] print[datetime_object]
Output
2020-10-27 00:00:00
That is it for converting a string to datetime in a Python article.
See also
Python datetime to string
Python Date Format