python 时间转换成带有tz的_仅使用python标准库将python UTC日期时间转换为本地日期时间?...

在Python 3.3+中:

from datetime import datetime, timezone

def utc_to_local(utc_dt):

return utc_dt.replace(tzinfo=timezone.utc).astimezone(tz=None)

在Python 2/3中:

import calendar

from datetime import datetime, timedelta

def utc_to_local(utc_dt):

# get integer timestamp to avoid precision lost

timestamp = calendar.timegm(utc_dt.timetuple())

local_dt = datetime.fromtimestamp(timestamp)

assert utc_dt.resolution >= timedelta(microseconds=1)

return local_dt.replace(microsecond=utc_dt.microsecond)

使用pytz(Python 2/3):

import pytz

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

# NOTE: pytz.reference.LocalTimezone() would produce wrong result here

## You could use `tzlocal` module to get local timezone on Unix and Win32

# from tzlocal import get_localzone # $ pip install tzlocal

# # get local timezone

# local_tz = get_localzone()

def utc_to_local(utc_dt):

local_dt = utc_dt.replace(tzinfo=pytz.utc).astimezone(local_tz)

return local_tz.normalize(local_dt) # .normalize might be unnecessary

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()))

产量

Python 3.3

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

Python 2

2010-06-06 21:29:07.730000

2010-12-06 20:29:07.730000

2012-11-08 14:19:50.093911

pytz

2010-06-06 21:29:07.730000 MSD+0400

2010-12-06 20:29:07.730000 MSK+0300

2012-11-08 14:19:50.146917 MSK+0400

注意:它考虑了DST和最近MSK时区的utc偏移的变化。

我不知道非pytz解决方案是否适用于Windows。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值