前田です。

At Thu, 15 Mar 2001 04:30:41 +0900,
URA Takefumi <hage / power.email.ne.jp> wrote:
> 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で生成するのはまずいのではないでしょうか。

localtimeで返すサーバもあったので、それに対応するためです。
# [ruby-list:7875], [ruby-dev:2701]

>      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

これだったらユーザがlocaltimeしてもいいのでいらないですよね。

-- 
前田 修吾