python中通過datetime獲取UTC時間ISO格式


一個熱點統計需求,需要限定一個時間范圍,計算出該范圍內的熱點事件,相關數據則以UTC標准時間的ISO時間格式存在mongodb中,和服務器設置的時區UTC+8並不一致。

為了解決這個問題,直覺反應是在python中將時區改為UTC時區,然而改變整個服務的時區設置卻可能會影響其他邏輯,此種更改最好是能限定在熱點邏輯的這個范圍內。

也可以在使用datetime類的時候指定時區信息,這樣也可以獲得UTC時間,如下為默認時區和指定UTC的輸出結果,差了8個小時(北京時間UTC+8)

>>> datetime.datetime.now()
datetime.datetime(2017, 9, 18, 0, 28, 50, 666364)
>>> utc_tz = pytz.timezone('UTC')
>>> datetime.datetime.now(tz=utc_tz)
datetime.datetime(2017, 9, 17, 16, 28, 54, 535585, tzinfo=<UTC>)

要獲取ISO格式的時間則可以調用datetime類中的isoformat函數:

>>> datetime.datetime.now().isoformat()
'2017-09-18T00:30:50.587223'
>>> datetime.datetime.now(tz=utc_tz).isoformat()
'2017-09-17T16:30:58.410670+00:00'

這樣也可以實現生成UTC時間的ISO格式功能,但是略顯麻煩,help(datetime.datetime)查看發現已經有定義好的utc相關函數可以用了,utcnow函數就可以獲得當前的utc標准時間:

>>> datetime.datetime.utcnow()
datetime.datetime(2017, 9, 17, 16, 40, 18, 683716)
>>> datetime.datetime.utcnow().isoformat()
'2017-09-17T16:41:06.418447'

要限定時間范圍,則可以通過datetime.timedelta類獲得一個按天、秒或毫秒計數的時間區間,然后和當前時間相減即可得出起始時間了,例如起始時間為當前時間往前10天10秒0毫秒:

>>> td = datetime.timedelta(days=10,seconds=10,microseconds=0)
>>> td
datetime.timedelta(10, 10)
>>> datetime.datetime.utcnow().isoformat()
'2017-09-17T16:52:04.020059'
>>> (datetime.datetime.utcnow() - td).isoformat()
'2017-09-07T16:51:54.525088'

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM