Search code examples
pythonutcpython-2.6gmtpytz

Convert GMT based time to UTC python


I get a date like 2014/08/19 03:38:46 GMT-4 from the database.

How do I convert this into UTC formatted date in Python?

PS: I use Python 2.6.6


Solution

  • Having a non-naive datetime object, you only should invoke astimezone method with desired timezone

    >>> import pytz
    >>> from dateutil import parser
    # dateutil.parser get a datetime object from string, we ensure that is a non-naive datetime
    >>> parser.parse('2014/08/19 03:38:46 GMT-4')
    datetime.datetime(2014, 8, 19, 3, 38, 46, tzinfo=tzoffset(None, 14400))
    >>> dt = parser.parse('2014/08/19 03:38:46 GMT-4')
    >>> dt.astimezone (pytz.utc)
    datetime.datetime(2014, 8, 18, 23, 38, 46, tzinfo=<UTC>)
    

    You are right in your comment, utc time should go behind, so while I think another solution, what about this

    >>> dt = parser.parse('2014/08/19 03:38:46 GMT-4')
    >>> dt.replace(tzinfo=pytz.utc) + dt.tzinfo._offset
    datetime.datetime(2014, 8, 19, 7, 38, 46, tzinfo=<UTC>)