2012-02-16 12 views
1

私は次の時間を持っている:20111122050940.086000と私は秒に変換したいと思いますので、私は次のコードを使用しています:私は戻って変換していた場合、その後timetupleする秒から、Pythonのタイムゾーン変換

def get_precision_datenum(self, datestring): 
     ymdhms, usec = datestring.split('.') 

     timestamp = datetime.datetime.strptime(ymdhms, "%Y%m%d%H%M%S")   
     datenum = mktime(timestamp.timetuple()) + float(usec)/1000000 
     print datenum; 
     return "%10.3f" % datenum 

を時間は1時間で少なくなります。代わりに2011-11-22 05:09:40の代わりに、私は2011-11-22 04:09:40を得ています。

ここで私は間違いを犯しましたか?

+0

'.'の後に常に6桁の数字がありますか? 'datenum = mktime(timestamp.timetuple())+ float("。 "+ usec)' – glglgl

答えて

4

あなたの日付ストリングはUTCである場合:

from datetime import datetime 
import calendar 
import pytz 

datestring = '20111122050940.086000' 
ymdhms, usec = datestring.split('.') 

dt = pytz.utc.localize(datetime.strptime(ymdhms, '%Y%m%d%H%M%S')) 
calendar.timegm(dt.utctimetuple()) + float(usec)/1000000. 

プリント1321938580.086(独立して、あなたのシステムのタイムゾーンから)

UTCとしてそれを印刷するには:あなたが異なっている場合

dt_utc = pytz.utc.localize(datetime.utcfromtimestamp(1321938580.086)) 

# datetime.datetime(2011, 11, 22, 5, 9, 40, 86000, tzinfo=<UTC>) 

dt_utc.strftime('%Y%m%d%H%M%S.%f') 

# '20111122050940.086000' 

最初に変換する必要があります。

dt_hu = dt_utc.astimezone(pytz.timezone('Europe/Budapest')) 

# datetime.datetime(2011, 11, 22, 6, 9, 40, 86000, tzinfo=<DstTzInfo 'Europe/Budapest' CET+1:00:00 STD>) 

してからは、それを印刷する:これはあまりにも、あなたのシステムのタイムゾーンとは独立して動作します

dt_hu.strftime('%Y%m%d%H%M%S.%f') 

# '20111122060940.086000' 

+0

それはUTCなのでしょうか?タイムゾーンはCETです –

+0

@KicsiMano - ok、ここではアップデートされたバージョン – eumiro

+0

Pythonのタイムゾーン変換を調べるには、Taavi BurnsのPyCon 2012プレゼンテーションの便利なテーブルを使用します。 http://taaviburns.ca/presentations/what_you_need_to_know_about_datetimes/ http://pyvideo.org/video/946/what-you-need-to-know-about-datetimes – akaihola

関連する問題