2012-02-16 4 views
1

나는 다음 시간이 : 20111122050940.086000 나는 초로 변환하고 싶은, 그래서 나는 다음과 같은 코드를 사용하고 있습니다 : 나는 다시 변환있을 때 다음 timetuple 초에서파이썬 시간대 변환

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이 표시됩니다.

어디서 실수 했습니까? 당신의 날짜 열이 UTC에있는 경우

+0

'.' 뒤에 항상 6 자리가 있습니까? 'datenum = mktime (timestamp.timetuple()) + float ("."+ usec)' – glglgl

답변

4

: (독립적으로 시스템 시간대에서)

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 timezone 변환을 살펴보기 위해 Python 2012 프리젠 테이션의 Taavi Burns 프리젠 테이션을 사용합니다. http://taaviburns.ca/presentations/what_you_need_to_know_about_datetimes/ http://pyvideo.org/video/946/what-you-need-to-know-about-datetimes – akaihola