前言
最近遇到了一個問題:我的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