浦です。

Net::FTP#mtime(以下mtime)について疑問があります。

mtimeは、ftpdに体してMDTMコマンドを投げています。そして、
以下のようなコードになっています。

    def mtime(filename, local = false)
      str = mdtm(filename)
      ary = str.scan(MDTM_REGEXP)[0].collect {|i| i.to_i}
      return local ? Time.local(*ary) : Time.gm(*ary)
    end

さて、このメソッドがlocal = trueで呼ばれたとき、Time.local(*ary)で
Timeオブジェクトを生成してるわけですが、これは意味があること
なのでしょうか? 

これ、aryの中身がローカルタイムだと見做して、Timeオブジェクトを
作ってるわけですよね。しかし、MDTMで返ってくる数字は

http://www.ietf.org/internet-drafts/draft-ietf-ftpext-mlst-12.txt

によると、

>    Time values are always represented in UTC (GMT), 

なので、Time::localで生成するのはまずいのではないでしょうか。

# つうか、これでハマった。

たぶん、これ、こうしたかったんだと推測してるんですがどうなんでしょう。

# えーと、パッチを出すのは初めてなんですけど、こんなんでいいんでしょうか?

diff -uNr prj/ruby/lib/net/ftp.rb /usr/local/lib/ruby/1.6/net/ftp.rb
--- prj/ruby/lib/net/ftp.rb	Thu Dec 21 15:35:04 2000
+++ /usr/local/lib/ruby/1.6/net/ftp.rb	Thu Mar 15 04:24:36 2001
@@ -501,7 +501,9 @@
     def mtime(filename, local = false)
       str = mdtm(filename)
       ary = str.scan(MDTM_REGEXP)[0].collect {|i| i.to_i}
-      return local ? Time.local(*ary) : Time.gm(*ary)
+      result = Time.gm(*ary)
+      result.localtime if local
+      return result
     end
     
     def mkdir(dirname)


--
浦 岳史 (うら たけふみ) 【メイルアドレスをURL表記しよう運動】
    mailto:hage / power.email.ne.jp