2011-03-12 137 views
6

我想在Python中將當前時間轉換爲+0900。Python:將本地時間轉換爲另一個時區

什麼是適當的方式來做到這一點(假設在時間模塊中)?

我讀過這不包括在Python中,你必須使用類似pytz的東西。

我不想在服務器基礎上或全局更改它,只是在這一個實例中。

回答

6

您可以改用datetime module。從http://docs.python.org/library/datetime.html#datetime.tzinfo.fromutc

from datetime import tzinfo, timedelta, datetime 

class FixedOffset(tzinfo): 
    def __init__(self, offset): 
     self.__offset = timedelta(hours=offset) 
     self.__dst = timedelta(hours=offset-1) 
     self.__name = '' 

    def utcoffset(self, dt): 
     return self.__offset 

    def tzname(self, dt): 
     return self.__name 

    def dst(self, dt): 
     return self.__dst 

print datetime.now() 
print datetime.now(FixedOffset(9)) 

改編給出:

2011-03-12 00:28:32.214000 
2011-03-12 14:28:32.215000+09:00 

當我運行它(我UTC-0500的另一天,然後DST開始)

+0

謝謝。很好的答案!您還可以添加'print datetime.utcnow()'來顯示時間的完整圖片 - 您的本地,UTC和移動時間。 – 2014-12-01 12:32:23

0

datetime模塊中,有一個稱爲tzinfo的抽象基類,它控制datetime.datetimedatetime.time如何處理時區。你基本上派生自己的課程來控制時區解釋。我從來沒有親自使用它,所以我不能多說這些。

不幸的是,我相信,唯一的時區控制是直接在time模塊工作中看到的。

9

我想將電流轉換Python中的時間爲+0900 ...
我不想在服務器基礎上或全局範圍內更改它,只是在這一個實例中。

爲了獲得當前時間+0900時區UTC的偏移量:

from datetime import datetime, timedelta 

current_time_in_utc = datetime.utcnow() 
result = current_time_in_utc + timedelta(hours=9) 

不要使用意識到datetime對象,除非你還使用pytz庫,否則你可能會由於DST過渡和其它時區錯誤的結果變化。如果你需要對datetime對象進行一些算術操作;首先將它們轉換爲UTC。

+0

這完全是我所需要的。謝謝! – Tensigh 2017-03-31 16:11:08

1

萬一可以使用pytz和其他外部模塊,這是一個更直接的解決方案

pip install pytz tzlocal 

然後

from datetime import datetime 
from pytz import timezone 
import pytz 
from tzlocal import get_localzone 

#timezones 
local = get_localzone() 
utc = pytz.utc 
cet = timezone('CET') 

#get now time in different zones 
print(datetime.now(local)) 
print(datetime.now(cet)) 
print(datetime.now(utc)) 

#convert local time now to CET 
print(datetime.now(local).astimezone(cet)) 
print(datetime.now(cet).astimezone(utc)) 
7

實施例用於從UTC轉換數據到IST

from datetime import datetime 
from pytz import timezone 

format = "%Y-%m-%d %H:%M:%S %Z%z" 

# Current time in UTC 
now_utc = datetime.now(timezone('UTC')) 
print now_utc.strftime(format) 
Output: 2015-05-18 10:02:47 UTC+0000 

# Convert to Asia/Kolkata time zone 
now_asia = now_utc.astimezone(timezone('Asia/Kolkata')) 
print now_asia.strftime(format) 
Output: 2015-05-18 15:32:47 IST+0530 
+0

謝謝。你說'亞洲/加爾各答',但我怎麼能看到一個可接受的時區字符串列表,例如亞洲/日本? – f126ck 2017-07-15 17:37:30

+0

我的意思是有一個命令withoin pytz打印所有時區字符串avilable? – f126ck 2017-07-15 17:38:10

+0

發現自己'print(pytz.all_timezones)' – f126ck 2017-07-15 17:41:17

相關問題