5

Time.rfc2822関数を強制的に吐き出すにはどうすればよい+0000ですか?

Ruby を使用すると、RFC2822形式の時刻を非常に簡単に解析できます。

require 'time'
time = Time.parse('14 Aug 2009 09:28:32 +0000')
puts time
=> "2009-08-14 05:28:32 -0400"

しかし、時間を表示するにはどうすればよいでしょうか。解析された時刻は現地時間であることに注意してください。心配する必要はありません。次の方法で UTC 時間に戻すことができますgmtime

puts time.gmtime
=> "2009-08-14 09:28:32 UTC"

その後、RFC2822 形式に戻すことができます。

puts time.gmtime.rfc2822
=> "Fri, 14 Aug 2009 09:28:32 -0000"

残念ながら、これは私が望むものではありません。+0000が になっていることに注意してください-0000。RFC2822 によると、これは次の理由によるものです。

「+0000」という形式は、世界時のタイム ゾーンを示すために使用する必要があります。「-0000」も世界時を示しますが、世界時以外のローカル タイム ゾーンにある可能性のあるシステムで時刻が生成されたことを示すために使用されるため、日時にローカル時刻に関する情報が含まれていないことを示します。ゾーン。

素晴らしい -モンキーパッチを機能+0000に適用する以外に、どうすれば強制できますか?rfc2822

4

2 に答える 2

4

これが私のmonkeypatchソリューションです:

class Time
  alias_method :old_rfc2822, :rfc2822
  def rfc2822
    t = old_rfc2822
    t.gsub!("-0000", "+0000") if utc?
    t
  end
end

モンキーパッチ以外のソリューションをお持ちの場合は、ぜひご覧ください。

于 2009-08-18T01:28:14.743 に答える