CDNthe2nd
CDNthe2nd

Reputation: 369

Python - Convert ISO 8601 to BST time

So basically I have learned a bit with ISO 8601 where the format is

"2018-07-06T07:00:00.000"

and basically what I have achieved is that I starting of to change the ISO to a more formal timestamp which is:

etatime = str(datetime.datetime.strptime("2018-07-06T07:00:00.000", "%Y-%m-%dT%H:%M:%S.%f"))

which will give an output of:

2018-07-06 07:00:00

However I noticed the time is 1 hour behind the BST (British time) which should be added one hour.

My question is, is there possible to go from (2018-07-06T07:00:00.000) to (2018-07-06 08:00:00 BST)?

Upvotes: 0

Views: 2268

Answers (2)

deceze
deceze

Reputation: 521994

Assumptions: the input represents a UTC timestamp, and you want to localise that to London time. You probably do not want to localise it to BST time, since BST is the DST variation of GMT, and an actual location like London will switch between BST and GMT depending on the time of year. You'll want to install the pytz module.

from datetime import datetime, timezone
import pytz

date = '2018-07-06T07:00:00.000'
utc_date = datetime.strptime(date, '%Y-%m-%dT%H:%M:%S.%f').replace(tzinfo=timezone.utc)
london_date = utc_date.astimezone(pytz.timezone('Europe/London'))
datetime.datetime(2018, 7, 6, 8, 0, tzinfo=<DstTzInfo 'Europe/London' BST+1:00:00 DST>)

strptime gives you a naïve datetime object (without timezone information), .replace gives you an aware datetime object (with timezone information), which then enables you to simply convert that to a different timezone.

Upvotes: 1

Vasilis G.
Vasilis G.

Reputation: 7846

One suggestion is that you can use the timedelta function from datetime module:

from datetime import datetime, timedelta

etatime = datetime.strptime("2018-07-06T07:00:00.000", "%Y-%m-%dT%H:%M:%S.%f")

# Before adding one hour
print(etatime)

etatime = etatime + timedelta(hours=1)

# After adding one hour
print(etatime)

Output:

2018-07-06 07:00:00
2018-07-06 08:00:00

Upvotes: 1

Related Questions