【问题标题】:Twitter Gem showing wrong created at TimeTwitter Gem 显示错误创建时间
【发布时间】:2018-05-02 07:12:40
【问题描述】:

我有以下代码,在 ruby​​ on rails 中使用 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 版。

【问题讨论】:

  • 请包含服务器日志
  • 时间可能是从 twitter 转换的,就好像它是 UTC。尝试从 twitter 检索 UTC 时间,看看是否能解决问题。尽管您正在为 twitter 指定时区,但 rails 无法建立关系,只是假定默认值,并尝试对其进行转换。
  • @DivXZero 更改为 UTC 也不会显示正确的时间。
  • minimal reproducible example,拜托。鉴于提供的信息有限,我不知道如何重现您的问题。
  • 例如,您使用的是什么版本的 gem? This change 在 2014 年使所有时间都返回 UTC 而不是本地时区。

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


【解决方案1】:

让我们将其简化为 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 时间转换为不同的时区,因此您可能会错误地显示它。

【讨论】:

  • 为了将来在 StackOverflow 上的参考:我要求 minimal reproducible example 有一个非常重要的原因 - 你从未真正展示过 tweet 是什么,所以我实际上无法复制你的问题。以上答案只是一个最佳猜测。
  • 返回时区显示我正确的时区“-0500”。所以我认为这确实是一个 Twitter 问题。 tweet 是 API 返回的推文对象。
  • @FrankDoe 正如我上面所展示的,这与 Twitter 无关。您将 UTC 时间转换为不同的区域,然后显示它没有时区信息 - 所以当然它会是一个不同的小时。
  • 很明显tweet 将是一些这样的对象,但你没有显示它是哪个 推文,或者你用什么代码来检索它。你的例子是incompletenon-verifiable
  • 如果我以任何方式冒犯了您,我深表歉意。我当然不是最年轻的,只是想掌握一些事情。我对堆栈溢出也很陌生。我已经用我用来从用户那里提取推文的所有代码更新了这个问题。
猜你喜欢
  • 1970-01-01
  • 2012-09-25
  • 1970-01-01
  • 1970-01-01
  • 2016-09-17
  • 2019-07-29
  • 2019-02-13
  • 2012-12-31
  • 2013-09-13
相关资源
最近更新 更多