1

奇妙な...ここで何がうまくいかないのか誰か教えてもらえますか? これは strptime のバグですか?

1.9.3p194 :079 > format = "%m/%-d/%Y %-I:%M:%S %p"
 => "%m/%-d/%Y %-I:%M:%S %p" 
1.9.3p194 :080 > now = Time.now.strftime(format)
 => "12/4/2012 1:44:45 PM" 
1.9.3p194 :081 > Time.strptime(now, format)
ArgumentError: invalid strptime format - `%m/%-d/%Y %-I:%M:%S %p'
    from /Users/fedenusy/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/1.9.1/time.rb:283:in `strptime'
from (irb):81
from /Users/fedenusy/.rvm/gems/ruby-1.9.3-p194/gems/railties-3.2.9/lib/rails/commands/console.rb:47:in `start'
from /Users/fedenusy/.rvm/gems/ruby-1.9.3-p194/gems/railties-3.2.9/lib/rails/commands/console.rb:8:in `start'
from /Users/fedenusy/.rvm/gems/ruby-1.9.3-p194/gems/railties-3.2.9/lib/rails/commands.rb:41:in `<top (required)>'
from script/rails:6:in `require'
from script/rails:6:in `<main>'

編集:明確にするために、「12/4/2012 1:44:45 PM」など、この特定の形式で日付を操作しようとしています。

4

3 に答える 3

3

strftime でパディングを抑制するために使用されるマイナス (-) フラグは、strptime ではサポートされていません。

Rails からの Date#strptime または Time#strptime 呼び出しをトレースすると、最終的にstrptimeの Ruby VM ソース コードに到達することがわかります。「-」文字を処理するパーサーにはケースがないことがわかります。これを、そのケースがあるstrftimeの実装と比較できます。

したがって、フォーマット文字列を解析に使用することはできません。有効にするには、マイナスを削除する必要があります。

于 2012-12-05T01:22:19.023 に答える
1

Date または DateTime はstrptimeメソッドを提供します。時間がstrftime方法を提供します。右?

于 2012-12-04T21:59:44.307 に答える
1

このフォーマットを試す

format = "%m/%d/%Y %I:%M:%S %p"

取得するため:

=> `"12/04/2012 02:52:58 PM"` 
于 2012-12-04T21:53:39.393 に答える