使用pytz模組進行時區轉換及時間計算

pythontab發表於2018-07-02

前言

最近遇到了一個問題:我的server和client不是在一個時區,server時區是EDT,即美國東部時區,client,就是我自己的電腦,時區是中國標準時區,東八區。我需要向server傳送一個時間,使得server在這個時間戳去執行一些動作。這個時間戳通常是當前時間加2分鐘或者幾分鐘。


通常美東在夏令時時,和我們相差12小時,所以直接減掉這12小時,然後再加兩分鐘,可以實現傳送基於server的時間戳,但是隻有一半時間是夏令時,所以考慮還是基於時區來做。


1. 安裝pytz

pip install pytz

未安裝pip的先看這篇文章, http://www.pythontab.com/html/2015/pythonhexinbiancheng_1012/963.html


2. 列印時區

列印中國和美國的時區列表

#-*-coding:utf-8-*-
#/usr/bin/env python
import pytz
print(pytz.country_timezones('cn'))
print(pytz.country_timezones('us'))

結果:

['Asia/Shanghai', 'Asia/Urumqi']
[u'America/New_York', u'America/Detroit', u'America/Kentucky/Louisville', u'America/Kentucky/Monticello', u'America/Indiana/Indianapolis', u'America/Indiana/Vincennes', u'America/Indiana/Winamac', u'America/Indiana/Marengo', u'America/Indiana/Petersburg', u'America/Indiana/Vevay', u'America/Chicago', u'America/Indiana/Tell_City', u'America/Indiana/Knox', u'America/Menominee', u'America/North_Dakota/Center', u'America/North_Dakota/New_Salem', u'America/North_Dakota/Beulah', u'America/Denver', u'America/Boise', u'America/Phoenix', u'America/Los_Angeles', u'America/Anchorage', u'America/Juneau', u'America/Sitka', u'America/Metlakatla', u'America/Yakutat', u'America/Nome', u'America/Adak', u'Pacific/Honolulu']


這個列表中的都是標準的國際時區,不過也不是那麼全, 比如中國的'Asia/Chongqing'


3. 計算某個地區的當地時間

#-*-coding:utf-8-*-
#/usr/bin/env python
import pytz
import time
import datetime
tz = pytz.timezone('America/New_York')
dt = datetime.datetime.now(tz).strftime("%Y-%m-%d %H:%M:%S")
print(dt)

結果:

2018-07-02 07:05:40


4. 時間加減計算

將時間轉換為秒,加上120秒,然後再轉換回標準格式

#-*-coding:utf-8-*-
#/usr/bin/env python
import pytz
import time
import datetime
tz = pytz.timezone('America/New_York') # 這裡需要使用標準時區, 不能填國家程式碼us
now = datetime.datetime.now(tz).strftime("%Y-%m-%d %H:%M:%S")
mtime=time.mktime(time.strptime(now,'%Y-%m-%d %H:%M:%S'))+int(2)*60
print(time.strftime("%Y-%m-%d %H:%M",time.localtime(mtime)))

結果:

2018-07-02 07:09


相關文章