See also How do I parse an ISO 8601-formatted date?
Unfortunately, a string as '2020-05-23T06:35:11.418279Z' cannot be parsed directly with the built-in fromisoformat
(Python 3.7+) due to the Z
. You can use strptime
instead, or this workaround, or dateutil's parser. Ex:
from datetime import datetime
import dateutil
s = '2020-05-23T06:35:11.418279Z'
### parsing options
# strptime
dt = datetime.strptime(s, '%Y-%m-%dT%H:%M:%S.%f%z')
# alternatively fromisoformat with replace (most efficient)
dt = datetime.fromisoformat(s.replace('Z', '+00:00'))
# or more convenient and a bit less efficient:
dt = dateutil.parser.isoparse(s)
# change timezone to Indian Standard Time:
dt = dt.astimezone(dateutil.tz.gettz('Asia/Kolkata'))
# datetime.datetime(2020, 5, 23, 12, 5, 11, 418279, tzinfo=tzfile('Asia/Calcutta'))
# note for Python 3.9+:
# use zoneinfo from the standard lib to get timezone objects
# now format to string with desired format
s_out = dt.strftime('%Y-%m-%d %I:%M %p')
s_out
# '2020-05-23 12:05 PM'