2015-06-22 71 views
-1

轉換本地時間(PDT)到PST通常我做什麼,如果我要轉換時區以下你如何使用python

# local interpreted as pst to utc 

utc = pytz.utc 
pst = pytz.timezone('America/Los_Angeles') 


start_time_str = time.strftime('%Y-%m-%d %H:%M:%S', \ 
    time.localtime(start_time)) 
start_time_datetime = \ 
    datetime.datetime.strptime(start_time_str, "%Y-%m-%d %H:%M:%S") 

start_time_datetime = \ 
    start_time_datetime.replace(tzinfo=pst).astimezone(utc) 

現在我想要做類似的東西,這樣我想本地時間轉換到PST

localtime = datetime.datetime.fromtimestamp(time.mktime(
      time.localtime())) 

我不完全相信你將如何實現這一目標

任何幫助,將不勝感激

+0

類似http://stackoverflow.com/questions/4974712/python-setting-a- datetime-in-a-specific-timezone-without-utc-conversions – LittleQ

+0

你的輸入是什麼?它是Unix時間'start_time'(一個數字)嗎?爲什麼只調用'strftime()'來立即調用'strptime()'(相反的轉換)? 「localtime」計算的目的是什麼(你知道'datetime.now()')? – jfs

回答

2

兩件事情:

  1. "America/Los_Angeles"標識符表示整個太平洋時區,包括 PST和PDT。它將使用-8或-7作爲時區偏移,具體取決於其使用的具體日期和時間。

  2. 調用replace(tzinfo=...)是一個錯誤。改爲使用localize。見the pytz documentation。這在介紹和第一個例子中討論。

+0

+1提到'本地化',這是非常重要的。如果使用'replace',就可以得到一些非常奇怪的錯誤,這與在'datetime'構造函數中指定時區對象相同。 –

1

你的代碼中包含不必要的(調用strftimestrptime)或絕對錯誤的(.replace())轉換。

要創建給定的 「因爲時代秒」 start_time(由time.time()返回的值)的感知對象的日期時間:

#!/usr/bin/env python 
from datetime import datetime 
import pytz # $ pip install pytz 

tz = pytz.timezone('America/Los_Angeles') 
start_time_datetime = datetime.fromtimestamp(start_time, tz) 

As @Matt Johnson mentions'America/Los_Angeles'時區ID產生時間具有取決於日期PST或PDT TZNAME。沒有轉換是必要的。

您問題中的最後一個代碼示例既有不必要的轉換,也可能在某些情況下失敗。如果目的是讓在本地時區作爲意識到DateTime對象的當前時間,那麼你可以使用tzlocal module

#!/usr/bin/env python 
from datetime import datetime 
from tzlocal import get_localzone # $ pip install tzlocal 

local_timezone = get_localzone() # pytz timezone corresponding to the local time 
current_localtime = datetime.now(local_timezone)