strftime

mswin32バイナリのrubyで、Time.now.strftimeに長いstringを与えると、""が返ってくる。Vista x64 Ultimateに http://www.garbagecollect.jp/ruby/mswin32/ja/x32とx64をインストールしてみたけど、どっちもダメだった。他の環境(Win XP SP2 x86, Freebsd x86 amd64)では問題なかった。また、cygwinも問題なし。

以下、ソース。

require 'test/unit'
class TestStrftime < Test::Unit::TestCase
  def test_simple
    str = '%Y'
    (1..100).each do |t|
      str = str + 'Y'
      grepstr = str.gsub(/%Y/, Time.now.year.to_s)
      strfstr = Time.now.strftime(str)
      assert_equal(grepstr, strfstr)
    end
  end
end

で、Vista x64の出力が

Loaded suite datetest
Started
F
Finished in 0.014 seconds.

  1) Failure:
test_simple(TestStrftime)
    [datetest.rb:9:in `block in test_simple'
     datetest.rb:5:in `each'
     datetest.rb:5:in `test_simple']:
<"2008YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY
YYYYYYYYYYYYYYYYYYYYYY"> expected but was
<"">.

1 tests, 96 assertions, 1 failures, 0 errors

他のは勿論エラーなし。

Loaded suite datetest
Started
.
Finished in 0.0 seconds.

1 tests, 100 assertions, 0 failures, 0 errors

(追記)

じゃあ、cygwinをつかえとなるかもしれないが、cygwinRuby on Railsで/dev/urandom関係のエラーがでるので、使えないのじゃ。コンソールで使えるようにすることはできるのじゃが、Radrails上で使えないのじゃ。

うーん、こまったこまった。