Home  >  Article  >  Backend Development  >  How to Convert a UTC Datetime to a Local Datetime in Python Using the Standard Library?

How to Convert a UTC Datetime to a Local Datetime in Python Using the Standard Library?

Linda Hamilton
Linda HamiltonOriginal
2024-11-02 03:43:30925browse

How to Convert a UTC Datetime to a Local Datetime in Python Using the Standard Library?

Converting UTC Datetime to Local Datetime Using Python Standard Library

In programming, it is often necessary to convert datetimes between different time zones. The standard Python library provides limited functionality for this, but it is possible to achieve a basic conversion without external dependencies.

Problem

Given a UTC datetime instance created with datetime.utcnow(), how can we convert it to a local datetime instance, using only the Python standard library? Additionally, how do we obtain the default local timezone?

Solution

Python 3.3 :

<code class="python">from datetime import datetime, timezone

def utc_to_local(utc_dt):
    return utc_dt.replace(tzinfo=timezone.utc).astimezone(tz=None)</code>

Python 2/3 (using integer timestamp):

<code class="python">import calendar
from datetime import datetime, timedelta

def utc_to_local(utc_dt):
    timestamp = calendar.timegm(utc_dt.timetuple())
    local_dt = datetime.fromtimestamp(timestamp)
    return local_dt.replace(microsecond=utc_dt.microsecond)</code>

Using pytz (Optional)**

Python 2/3 (with pytz dependency):

<code class="python">import pytz

local_tz = pytz.timezone('Europe/Moscow') # use local timezone name here

def utc_to_local(utc_dt):
    local_dt = utc_dt.replace(tzinfo=pytz.utc).astimezone(local_tz)
    return local_tz.normalize(local_dt)</code>

Example

<code class="python">def aslocaltimestr(utc_dt):
    return utc_to_local(utc_dt).strftime('%Y-%m-%d %H:%M:%S.%f %Z%z')

print(aslocaltimestr(datetime(2010,  6, 6, 17, 29, 7, 730000)))
print(aslocaltimestr(datetime(2010, 12, 6, 17, 29, 7, 730000)))
print(aslocaltimestr(datetime.utcnow()))</code>

Output

2010-06-06 21:29:07.730000 MSD+0400
2010-12-06 20:29:07.730000 MSK+0300
2012-11-08 14:19:50.093745 MSK+0400

Notes

  • Non-pytz solutions may not work on Windows.
  • The provided examples take into account Daylight Saving Time and recent UTC offset changes for MSK timezone.

The above is the detailed content of How to Convert a UTC Datetime to a Local Datetime in Python Using the Standard Library?. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn