Twitter Gem显示在时间创建的错误

时间:2017-11-18 17:13:00

标签: ruby-on-rails ruby twitter twitter-gem

我有以下代码,在rails上的ruby中使用twitter gem。它没有返回创建推文的正确时间,虽然我已在application.rb设置了我的时区并且也在此设置了它。它比实际推文的创建时间提前三个小时返回。

      <% TwitterFeed.userTweets.each do |tweet| %>
      <blockquote>
        <%= parsed_tweet tweet %>
        <% time_est = tweet.created_at.in_time_zone('Eastern Time (US & Canada)')%>
        <br><small><%= (time_est.strftime("%m/%d/%y %I:%M%p %z"))  %></small> 
      </blockquote>
      <% end %>

我在application_helper.rb中有以下代码来解析返回的tweet对象的链接

module ApplicationHelper
  def parsed_tweet tweet
    _parsed_tweet = tweet.full_text.dup

    tweet.urls.each do |entity|
      html_link = link_to(entity.display_url.to_s, entity.expanded_url.to_s, target: '_blank')
      _parsed_tweet.sub!(entity.url.to_s, html_link)
    end

    tweet.media.each do |entity|
      html_link = link_to(entity.display_url.to_s, entity.expanded_url.to_s, target: '_blank')
      _parsed_tweet.sub!(entity.url.to_s, html_link)
    end

    _parsed_tweet.html_safe
  end
end

我的twitter_feed.rb文件中有以下代码,我保留了所有功能。

  def self.userTweets
    client.user_timeline("twitter", count: 5, exclude_replies: true, include_rts: false)
  end

我正在使用twitter gem的版本6.2.0。

1 个答案:

答案 0 :(得分:0)

让我们将其缩小为 minimal (!!)示例,因为这个问题实际上与Twitter完全无关:

time_utc = Time.utc(2017, 'Nov', 19, 13, 30, 0)
#=> 2017-11-19 13:30:00 UTC

time_est = time_utc.in_time_zone('Eastern Time (US & Canada)')
#=> Sat, 19 Nov 2017 08:30:00 EST -05:00

time_est.strftime("%m/%d/%y %I:%M%p")
#=> "11/19/17 08:30AM"

time_est.strftime("%m/%d/%y %I:%M%p %z")
#=> "11/19/17 08:30AM -0500"

您正在使用strftime 显示时区信息。

因此,自从您将created_at时间转换为其他时区后,您可能会错误地显示它。