【问题标题】:How do I get correct date and time from Tweepy?如何从 Tweepy 获取正确的日期和时间?
【发布时间】:2018-05-19 21:54:28
【问题描述】:

我正在尝试分析政治推文。

当我运行这段代码时:

import tweepy
from tweepy import OAuthHandler
import datetime

consumer_key    = '...'
consumer_secret = '...'
access_token    = '...'
access_secret   = '...'

auth = OAuthHandler(consumer_key, consumer_secret)
auth.set_access_token(access_token, access_secret)

api = tweepy.API(auth)

username = "VP"
startDate = datetime.datetime(2017, 12, 1, 0, 0, 0)
endDate =   datetime.datetime(2017, 12, 2, 0, 0, 0)

tweets = []
tmpTweets = api.user_timeline(username)
for tweet in tmpTweets:
    if tweet.created_at < endDate and tweet.created_at > startDate:
        tweets.append(tweet)

while (tmpTweets[-1].created_at > startDate):
    print("Last Tweet @", tmpTweets[-1].created_at, "...fetching more")
    tmpTweets = api.user_timeline(username, max_id = tmpTweets[-1].id)
    for tweet in tmpTweets:
        if tweet.created_at < endDate and tweet.created_at > startDate:
            tweets.append(tweet)

for tweet in tweets:
    print(tweet.created_at)

我明白了:

Last Tweet @ 2017-12-02 13:52:36 ...fetching more
2017-12-01 21:06:35
2017-12-01 12:29:27
2017-12-01 12:27:36
2017-12-01 00:50:17
2017-12-01 00:47:42
2017-12-01 00:25:32

但这是错误的。 VP 在 12 月 1 日发了 3 次推文。这些时间戳似乎提前了 4 小时。如何在东部时间解决此问题?

【问题讨论】:

    标签: python python-3.x datetime twitter tweepy


    【解决方案1】:

    时区..

    .created_at 是 UTC (+0000) 而您的 startDate 和 endDate 是本地日期时间对象。

    一种方法是将created_at 转换为本地,然后进行比较:

    created_date_local = datetime_from_utc_to_local(tweet.created_at)
    if endDate > created_date_local > startDate:
        # ...
    

    datetime_from_utc_to_local is defined as:

    def datetime_from_utc_to_local(utc_datetime):
        now_timestamp = time.time()
        offset = datetime.datetime.fromtimestamp(now_timestamp) - datetime.datetime.utcfromtimestamp(now_timestamp)
        return utc_datetime + offset
    

    这只是一种方法,不一定是最好的。

    根据需要仅打印 3 条推文:

    Last Tweet @ 2017-12-02 13:52:36 ...fetching more
    2017-12-01 21:06:35
    2017-12-01 12:29:27
    2017-12-01 12:27:36
    

    【讨论】:

    • 我绑定了这个方法: from datetime import timedelta ... # 转换为东部时间 startDate = startDate + timedelta(hours=4) endDate = endDate + timedelta(hours=4) ... print( tweet.created_at - timedelta(hours=4)) 似乎正在工作。感谢您的帮助!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-23
    • 1970-01-01
    • 1970-01-01
    • 2018-11-14
    • 1970-01-01
    • 2014-02-07
    相关资源
    最近更新 更多