Skip to main content

convert timestamp in utc timezone to a given timezone

python version: 3.7

I am trying to convert utc timestamps to a given timezone using pytz and astimezone.

(I have timestamps stored in my db in utc timezone and I amtrynig to convert them)

For example:

  • converting '2022-07-18 19:43:26.164345' timestamp to 'US/Pacific' timezone will result '2022-07-18 12:43:26.164345-07:00'
  • converting '2022-07-18 19:43:26.164345' timestamp to 'UTC' timezone will not affect any change - will result '2022-07-18 19:43:26.164345'

here is what I tried:

import pytz

def convert_utc_timestamp_to_timezone(utc_timestamp, dt_timezone):
  return utc_timestamp.astimezone(pytz.timezone(dt_timezone))

expected:

> dt = datetime.datetime.now()
> convert_utc_timestamp_to_timezone(dt, 'UTC') // expected result: dt

but no.., actual result::

> dt = datetime.datetime.now()
> converted = convert_utc_timestamp_to_timezone(dt, 'UTC')
> print(dt) # 2022-07-18 23:10:34.061169
> print(converted) # 2022-07-18 20:10:34.061169+00:00
# dt != converted not as I expect

This works when my local timezone is set to utc - for example when running on online browser

import datetime
import pytz


def convert_utc_timestamp_to_timezone(utc_timestamp, dt_timezone):
  return utc_timestamp.astimezone(pytz.timezone(dt_timezone))
  
dt = datetime.datetime.utcnow()
a = convert_utc_timestamp_to_timezone(dt, 'US/Pacific')

print('in utc timezone',dt)
print('after convert to US/Pacific timezone: ',a)


# results:
#in utc timezone 2022-07-18 20:18:37.253062
# after convert to US/Pacific timezone:  2022-07-18 13:18:37.253062-07:00

dt2 = datetime.datetime.utcnow()
a2 = convert_utc_timestamp_to_timezone(dt, 'UTC')
print('in utc timezone', dt2)
print('after convert to UTC timezone: ',a2)
# results:
# in utc timezone 2022-07-18 20:18:37.264363
# after convert to UTC timezone:  2022-07-18 20:18:37.253062+00:00

But does not work well when running locally - since my pc timezone isn't utc
(the doc actually states that astimezone “converts to local time”)

import pytz
def convert_utc_timestamp_to_timezone(utc_timestamp, dt_timezone):
    return utc_timestamp.astimezone(pytz.timezone(dt_timezone))
dt = datetime.datetime.utcnow()
a = convert_utc_timestamp_to_timezone(dt, 'US/Pacific')
print('in utc timezone', dt)
print('after convert to US/Pacific timezone: ', a)

# result:
# in utc timezone 2022-07-18 20:22:05.526588
# after convert to US/Pacific timezone:  2022-07-18 10:22:05.526588-07:00

dt2 = datetime.datetime.utcnow()
a2 = convert_utc_timestamp_to_timezone(dt, 'UTC')
print('in utc timezone', dt2)
print('after convert to UTC timezone: ', a2)

# result:
# in utc timezone 2022-07-18 20:22:05.576213
# after convert to UTC timezone:  2022-07-18 17:22:05.526588+00:00

what is the correct way to convert timestamp in utc timezone to a given timezone?
I tried pytz localize , but also doesn't give expected result



source https://stackoverflow.com/questions/73027918/convert-timestamp-in-utc-timezone-to-a-given-timezone

Comments