2

タイムスタンプ付きのツイートを一覧表示しようとしています。私はこれを持っています...

#!/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

python-twitterライブラリ内でこれを変更する方法はありますか?GetTimeZone()とSetTimeZone()を見ていました が、それらがどのように機能するかを理解できませんでした。

また、Pythonで日時オブジェクトを12時間シフトする方法も調べていますが、そこに行く必要があるかどうかはわかりません。

助けてくれてありがとう!

4

2 に答える 2

2

python-twitterは、ステータスタイムスタンプを文字列およびエポックからの秒数として返します。後者は、タイムゾーン対応datetimeインスタンスに変換するのが最も簡単です(この回答を参照)。

残念ながら、ユーザーのtime_zone属性は、で使用される標準のtzデータベース形式ではないため、代わりにユーザー属性pytzを使用する必要があります(この属性を使用して、UTCオフセットで作成された名前を付けます)。このパッケージは、UTCオフセットからインスタンスを作成できる便利なタイプを提供します。これを使用して、UTCからローカルタイムゾーンに変換できます。utc_offsettime_zonetzinfopython-dateutiltzoffsettzinfodatetime

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
于 2012-10-28T18:42:44.390 に答える
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も考慮しています。

ありがとうございました!

于 2012-10-29T02:20:01.213 に答える