第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

僅使用python標(biāo)準(zhǔn)庫將python UTC日期時間轉(zhuǎn)換為本地日期時間?

僅使用python標(biāo)準(zhǔn)庫將python UTC日期時間轉(zhuǎn)換為本地日期時間?

拉風(fēng)的咖菲貓 2019-08-16 15:05:30
僅使用python標(biāo)準(zhǔn)庫將python UTC日期時間轉(zhuǎn)換為本地日期時間?我有一個使用datetime.utcnow()創(chuàng)建并保存在數(shù)據(jù)庫中的python datetime實(shí)例。為了顯示,我想使用默認(rèn)的本地時區(qū)將從數(shù)據(jù)庫檢索的日期時間實(shí)例轉(zhuǎn)換為本地日期時間(即,就像使用datetime.now()創(chuàng)建日期時間一樣)。如何僅使用python標(biāo)準(zhǔn)庫將UTC日期時間轉(zhuǎn)換為本地日期時間(例如,沒有pytz依賴項(xiàng))?似乎一個解決方案是使用datetime.astimezone(tz),但是如何獲得默認(rèn)的本地時區(qū)?
查看完整描述

3 回答

?
慕萊塢森

TA貢獻(xiàn)1810條經(jīng)驗(yàn) 獲得超4個贊


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

產(chǎn)量

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時區(qū)的utc偏移的變化。


我不知道非pytz解決方案是否適用于Windows。


查看完整回答
反對 回復(fù) 2019-08-16
?
揚(yáng)帆大魚

TA貢獻(xiàn)1799條經(jīng)驗(yàn) 獲得超9個贊

您不能只使用標(biāo)準(zhǔn)庫,因?yàn)闃?biāo)準(zhǔn)庫沒有任何時區(qū)。你需要pytzdateutil。

>>> from datetime import datetime>>> now = datetime.utcnow()>>> from dateutil import tz>>> HERE = tz.tzlocal()>>> UTC = tz.gettz('UTC')The Conversion:>>> gmt = now.replace(tzinfo=UTC)>>> gmt.astimezone(HERE)datetime.datetime(2010, 12, 30, 15, 51, 22, 114668, tzinfo=tzlocal())

或者,你可以通過實(shí)現(xiàn)自己的時區(qū)來實(shí)現(xiàn)沒有pytz或dateutil。但這很愚蠢。


查看完整回答
反對 回復(fù) 2019-08-16
?
慕慕森

TA貢獻(xiàn)1856條經(jīng)驗(yàn) 獲得超17個贊

我想我想出來了:計算自紀(jì)元以來的秒數(shù),然后使用time.localtime轉(zhuǎn)換為本地timzeone,然后將時間結(jié)構(gòu)轉(zhuǎn)換回日期時間......


EPOCH_DATETIME = datetime.datetime(1970,1,1)

SECONDS_PER_DAY = 24*60*60


def utc_to_local_datetime( utc_datetime ):

    delta = utc_datetime - EPOCH_DATETIME

    utc_epoch = SECONDS_PER_DAY * delta.days + delta.seconds

    time_struct = time.localtime( utc_epoch )

    dt_args = time_struct[:6] + (delta.microseconds,)

    return datetime.datetime( *dt_args )

它正確應(yīng)用夏季/冬季夏令時:


>>> utc_to_local_datetime( datetime.datetime(2010, 6, 6, 17, 29, 7, 730000) )

datetime.datetime(2010, 6, 6, 19, 29, 7, 730000)

>>> utc_to_local_datetime( datetime.datetime(2010, 12, 6, 17, 29, 7, 730000) )

datetime.datetime(2010, 12, 6, 18, 29, 7, 730000)


查看完整回答
反對 回復(fù) 2019-08-16
  • 3 回答
  • 0 關(guān)注
  • 853 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號