The scenario: you have a textual timestamp with a timezone, and need to convert it to UTC. I had the former in and email date header, and needed it printed in UTC for the envelope.
The input looks like this:
Tue, 17 Mar 2009 18:57:55 -0300
from dateutil.parser import parse from datetime import timezone, datetime, timedelta t = parse("Tue, 17 Mar 2009 18:57:55 -0300") ## first way tu = t.astimezone(timezone.utc) ## second way tu = datetime.utcfromtimestamp(t.timestamp()) ## and as text text = tu.strftime("%c")
The main difference between the first and second ways is that the first way strips off the timezone info (tzinfo), so it become a “naive” datetime. The second way sets the tzinfo to utc, which is better.
Also, the Date lines in email headers varies, and taking a slice of [6:37] will chop off timezone markings like “(GMT-08:00)” that cause the parser to barf.