2

Rubyライブラリのコードをリファクタリングしています。このコードには、日付パーサーが含まれています。テストの1つは、ISO8601であると想定されるこの文字列「2008-02-20T8:05:00-010:00」を解析することでした。

前のコードは実際には「WedFeb2018:05:00UTC2008」を出力します。私の新しいコードは次のように出力します:「2008年2月20日水曜日16:05:00UTC」。

私の質問は:どちらが正しいですか?

Time.parseRubyでは2番目のものを提供します。しかし、繰り返しになりますが、前のコードとテストにバグがあることを100%確信したいと思います。

どちらが正しいですか?(多分別の言語のライブラリで文字列を解析することによって?-私はRubyしか知りません。)

4

2 に答える 2

2

正しいUTC時刻は1805です。時間グループはゾーン-10の0805を示しているため、UTCを取得するには、指定された時刻に10を追加します。したがって、1805です。1805は2400未満なので、同じ日です。

コードが1605を提供している場合、ほぼ確実にタイムゾーンが誤ってゾーン-8に設定されています。これはたまたま太平洋標準時です。


ああ、入力フォーマットがめちゃくちゃになっているようです。観察:

irb(main):003:0> Time.parse("2008-02-20T8:05:00-010:00") 
=> Wed Feb 20 08:05:00 -0700 2008

私はたまたまゾーン-7にいるので、それは私のロケールに適しています。だが

irb(main):004:0> t=Time.parse("2008-02-20T8:05:00-010:00")
=> Wed Feb 20 08:05:00 -0700 2008
irb(main):005:0> t
=> Wed Feb 20 08:05:00 -0700 2008
irb(main):006:0> t.getutc
=> Wed Feb 20 15:05:00 UTC 2008

予期しない結果が出ています。ここで観察します:

irb(main):007:0> t=Time.parse("2008-02-20T8:05:00-10:00")
=> Wed Feb 20 11:05:00 -0700 2008
irb(main):008:0> t.getutc
=> Wed Feb 20 18:05:00 UTC 2008

期待される結果があります。違いを見ます?最初の例と2番目の例:

irb(main):004:0> t=Time.parse("2008-02-20T8:05:00-010:00")
irb(main):007:0> t=Time.parse("2008-02-20T8:05:00-10:00")

私は偽の余分な0を取り出しました(私は確かにどちらにも気づいていませんでした)そしておっと、それは機能します。

于 2009-05-31T02:15:13.300 に答える
0

これはかなり古いことは知っていますが、偶然見つけました。

どこかで値が 8 の8 進010数として解釈されていると思います。おそらく、?の実装のバグです。Time.parse()

于 2011-08-06T01:37:35.240 に答える