2012-10-28 4 views
2

나는 자신의 타임 스탬프가있는 트윗을 나열하려고합니다. 나는 ...이를 출력합니다python-twitter 라이브러리를 사용하여 시간대를 설정하는 방법은 무엇입니까?

#!/usr/bin/python 
import twitter 
api = twitter.Api() 
statuses = api.GetUserTimeline('ttytter') 
for s in statuses: 
    print s.created_at + " " + s.text 

... 난 후,하지만 꽤 많이

Sat Oct 20 04:56:47 +0000 2012 @uriel1998 W/r/t DMs, they appear just fine in 2.0.4 and 2.1 beta here, near as I can tell.

잘못된 것 같다 시간에 대한 시간대. https://twitter.com/ttytter/status/259518502069760000

파이썬 - 트위터 라이브러리 내에서 이것을 변경할 수있는 방법이 있습니까? 내가 GetTimeZone() and SetTimeZone()을보고 있었지만 어떻게 작동하는지 알 수 없었습니다.

how to shift a datetime object by 12 hours in python도보고 싶지만 거기에 갈 필요가 있는지 확실하지 않습니다.

도움 주셔서 감사합니다.

+1

utc 시간을 짹짹의 작성자 표준 시간대 또는 현지 시간대로 변환 하시겠습니까? – jfs

+0

이 경우에는 동일하며 수동으로 설정하는 것이 좋습니다. 아마도 제작자의 시간대를 사용했다면 더 나은 스크립트 일 것입니다. – wagonlips

+0

질문의 일부가 아닌 경우 독립 투표, 주석 달기, 질문의 일부인 경우 적절하지 않은 작은 수정을 허용하는 코드를 게시 할 수 있습니다. 예를 들어, 'st_tz'는 스톡홀름 시간대를 나타냅니다. 코드에서'la_tz','user_tz','local_tz'로 바꿀 수 있습니다 ('st_dt '와 동일합니다). – jfs

답변

2

python-twitter은 상태 타임 스탬프를 문자열로 그리고 그 이후의 시간 (초)으로 반환합니다. 후자는 시간대를 인식하는 datetime 인스턴스 (이 answer 참조)로 변환하는 것이 가장 간단합니다. 그 대신 utc_offset 사용자 속성을 사용할 필요가 있도록

는 불행하게도 사용자의 time_zone 속성, pytz에서 사용되는 표준 tz database 형식이 아닌 (우리는 여전히 오프셋 UTC와 함께 만든 tzinfo의 이름을 위해 time_zone 속성을 사용). python-dateutil 패키지는 우리가 다음 로컬 시간대로 UTC에서 datetime를 변환하는 데 사용할 수있는 UTC 오프셋에서 tzinfo 인스턴스의 생성을 할 수있는 편리한 타입 tzoffset을 제공합니다 : 첫 번째의 출력을 제공

import pytz 
import twitter 

from datetime import datetime 
from dateutil.tz import tzoffset 

USERNAME = 'ttytter' 

api = twitter.Api() 

# get a 'tzinfo' instance with the UTC offset for the user's local time 
user = api.GetUser(USERNAME) 
localtime_tz = tzoffset(user.time_zone, user.utc_offset) 

statuses = api.GetUserTimeline(USERNAME) 
for s in statuses[:1]: 
    # get UTC timestamp from seconds since epoch 
    utc_dt = datetime.utcfromtimestamp(s.created_at_in_seconds).replace(tzinfo=pytz.utc) 
    print('utc: {}'.format(utc_dt)) 
    # convert to local time in the user's timezone 
    localtime_dt = utc_dt.astimezone(localtime_tz) 
    print('localtime [{}]: {}'.format(localtime_dt.tzname(), localtime_dt)) 

상태 :

utc: 2012-10-20 04:56:47+00:00 
localtime [Pacific Time (US & Canada)]: 2012-10-19 20:56:47-08:00 
+0

당신은'dateutil'을 필요로하지 않습니다. python-twitter는 [createdt_in_seconds]를 제공하며 주어진 시간대에서 [위에 링크 된 pytz 예제] (http://stackoverflow.com/a/12692910/4279)를 사용하여 시간으로 변환 할 수 있습니다. – jfs

+0

당신은 절대적으로 @ J.F.Sebastian입니다. 감사. 답을 수정하십시오. –

+0

dateutil.tzoffset 기반 코드는 DST 전환을 어떻게 설명합니까? – jfs

1

페드로 로마노과 JF 세바스찬의 제안을 결합, 나는 ...이이

import pytz 
import twitter 

from datetime import datetime 

USERNAME = 'ttytter' 

api = twitter.Api() 

user = api.GetUser(USERNAME) 
pst_tz = pytz.timezone('America/Los_Angeles') 

statuses = api.GetUserTimeline(USERNAME) 
for s in statuses[:1]: 
    # get UTC timestamp from seconds since epoch 
    utc_dt = datetime.utcfromtimestamp(s.created_at_in_seconds).replace(tzinfo=pytz.utc) 
    # convert to given timezone 
    pst_dt = pst_tz.normalize(utc_dt.astimezone(st_tz)) 
    print(pst_dt.strftime('%Y-%m-%d %H:%M:%S ')) + s.text 

출력 : 2012-10-19 21:56:47 @uriel1998 W/r/t DMs, they appear just fine in 2.0.4 and 2.1 beta here, near as I can tell.은 올바른 표준 시간대이며 DST도 고려합니다.

감사합니다.