Time#to_s format

e$BBg86$G$9!#e(B

Ruby 1.8.6 e$B$+$ie(B Time#to_s e$B$N7A<0$,e(B
RFC 2822 e$B=`5r$KJQ99$K$J$k$h$&$J$N$G$9$,!"e(B
e$B$3$N7A<0$,4V0c$C$F$$$k$h$&$K;W$$$^$9!#e(B

From: “NARUSE, Yui” [email protected]
Subject: [ruby-dev:29467] Re: [ruby-cvs:17256] ruby, ruby: * time.c
(time_to_s): generate RFC822 style date string.
Message-ID: [email protected]
Date: Mon, 4 Sep 2006 18:33:50 +0900

e$B$K$J$C$F$$$^$9$,!"e(B
p Time.now, Time.now.utc
Mon, Sep 04 2006 18:12:44 +0900
Mon, Sep 04 2006 09:12:44 UT
e$B$,@5$7$$$+$H!#e(B

RFC 2822 e$B$Ne(B 3.3. Date and Time Specification e$B$K$h$k$H!"e(B

date = day month year

e$B$,@5$7$$$h$&$G$9!#e(B


OHARA Shigeki (e$BBg86e(B e$B=E<ye(B) [email protected]

At Mon, 5 Mar 2007 18:44:19 +0900,
OHARA Shigeki wrote:

Ruby 1.8.6 から Time#to_s の形式が
RFC 2822 æº–æ‹ ã«å¤‰æ›´ã«ãªã‚‹ã‚ˆã†ãªã®ã§ã™ãŒã€
この形式が間違っているように思います。
(snip)
RFC 2822 の 3.3. Date and Time Specification によると、

date = day month year

が正しいようです。

 確かにその通りですね。修正します。

% /usr/local/bin/ruby -v -rtime -e ‘Time.rfc2822(Time.now.to_s)’
ruby 1.8.6 (2007-03-05 patchlevel 0) [i686-darwin8.8.3]
/usr/local/lib/ruby/1.8/time.rb:296:in `rfc2822’: not RFC 2822 compliant
date: “Mon, Mar 05 2007 19:25:08 +0900” (ArgumentError)
from -e:1

 ちょっと情けない…。


/
/__ __ Akinori.org / MUSHA.org
/ ) ) ) ) / FreeBSD.org / Ruby-lang.org
Akinori MUSHA aka / (_ / ( (__( @ iDaemons.org / and.or.jp

“Different eyes see different things,
Different hearts beat on different strings –
But there are times for you and me when all such things agree”

 ところで、 1.8.6 の Time#to_s を RFC 2822 形式にするというのは
最終決定でいいのでしょうか。1.9 ではまた違う形式になっていますが、
これは変更し忘れですよね?

 1.9 でまた変えるくらいなら、 1.8.6 で変えるのは避けたいのですが。


/
/__ __ Akinori.org / MUSHA.org
/ ) ) ) ) / FreeBSD.org / Ruby-lang.org
Akinori MUSHA aka / (_ / ( (__( @ iDaemons.org / and.or.jp

“Different eyes see different things,
Different hearts beat on different strings –
But there are times for you and me when all such things agree”

At Mon, 5 Mar 2007 23:27:33 +0900,
matz wrote:

Timezone表現の部分を数値表現にすることだけだったのですが、
Timezon表現の位置について悩んでいるうちにそのままRFC2822形式
になってしまったという経緯があります(当初、RFC2822とctime形
式の違いを十分に認識していなかった)。

 本当に RFC 2822 形式が欲しいならそれ用のメソッド(time.rb の
Time#rfc2822 なり自作メソッドなり)を使うべきなので、 to_s が
RFC 2822 形式である必要はないでしょうね。

 それはさておき、 inspect は usec を含む形式に変えた方がいいん
じゃないでしょうか。(ctime や RFC 2822 は usec を含められない)

で、Ruby 1.9ではISO8601形式(ただし区切りのTは使わない)にしよ
うと思っています。元々1.8の範囲内では小さな変更にして、1.9の
ときに大きな変更にしようと思っていましたから。

 1.9 の rdoc ã¯å®Ÿè£…ã‚’åæ˜ ã—ã¦ã„ã¾ã›ã‚“ã€‚ä»Šã®ä»•æ§˜ã¯ ISO 8601
でも YAML æº–æ‹ ã§ã‚‚ãªãä¸­é€”åŠç«¯ãªã®ã§ã€ã“ã®æ©Ÿä¼šã«å®Ÿè£…ã‚‚å¤‰ãˆã¦
しまった方がいいと思いますが。

Index: time.c

— time.c (revision 11998)
+++ time.c (working copy)
@@ -1185,11 +1185,14 @@

  • time.to_s    => string
    
  • Returns a string representing time. Equivalent to calling
    • Time#strftime with a format string of
      ``%a
    • %b %d %H:%M:%S
    • %Z %Y‘’.
    • Time#strftime with a format string of
    • ``%Y-%m-%d %H:%M:%S %z‘’
    • for local times and
    • ``%Y-%m-%d %H:%M:%S UTC‘’
    • for UTC times.
    • Time.now.to_s   #=> "Wed Apr 09 08:56:04 CDT 2003"
      
    • Time.now.to_s       #=> "2003-04-09 08:56:04 -0500"
      
    • Time.now.utc.to_s   #=> "2003-04-09 13:56:04 UTC"
      
    */

static VALUE

というわけで、今さらではありますが、私は

  • 1.8の範囲内ではRFC2822は採用せず、Timezoneを数値表現にす
    るだけ(つまり、1.8.5の状態に戻す)

  • 1.9でISO8601形式に

というのを提案します。が、すっかり忘れて放置していたのは私で
すし、もう時期も時期ですから、最終的な判断はknuさんに任せま
す。

 変えるに足る理由が見つからないので、 1.8.6 は 1.8.5 の仕様に
戻そうと思います。もっと早く突っ込んでおけばよかった。


/
/__ __ Akinori.org / MUSHA.org
/ ) ) ) ) / FreeBSD.org / Ruby-lang.org
Akinori MUSHA aka / (_ / ( (__( @ iDaemons.org / and.or.jp

“Different eyes see different things,
Different hearts beat on different strings –
But there are times for you and me when all such things agree”

e$B$^$D$b$He(B e$B$f$-$R$m$G$9e(B

In message “Re: [ruby-dev:30493] Re: Time#to_s format”
on Mon, 5 Mar 2007 22:15:13 +0900, “Akinori MUSHA”
[email protected] writes:

|e$B!!$H$3$m$G!"e(B 1.8.6 e$B$Ne(B Time#to_s e$B$re(B RFC 2822 e$B7A<0$K$9$k$H$$$&$N$Oe(B
|e$B:G=*7hDj$G$$$$$N$G$7$g$&$+!#e(B1.9 e$B$G$O$^$?0c$&7A<0$K$J$C$F$$$^$9$,!"e(B
|e$B$3$l$OJQ99$7K:$l$G$9$h$M!)e(B
|
|e$B!!e(B1.9 e$B$G$^$?JQ$($k$/$i$$$J$i!"e(B 1.8.6 e$B$GJQ$($k$N$OHr$1$?$$$N$G$9$,!#e(B

e$BFq$7$$$H$3$m$G$9!#;d$N85!9$N0U;W$Oe(Bctimee$BI=8=$G[#Kf@-$,Bg$-$$e(B
Timezonee$BI=8=$NItJ,$r?tCMI=8=$K$9$k$3$H$@$1$@$C$?$N$G$9$,!“e(B
Timezone$BI=8=$N0LCV$K$D$$$FG:$s$G$$$k$&$A$K$=$N$^$^e(BRFC2822e$B7A<0e(B
e$B$K$J$C$F$7$^$C$?$H$$$&7P0^$,$”$j$^$9e(B(e$BEv=i!"e(BRFC2822e$B$He(Bctimee$B7Ae(B
e$B<0$N0c$$$r==J,$KG’<1$7$F$$$J$+$C$?e(B)e$B!#e(B

e$B$G!"e(BRuby
1.9e$B$G$Oe(BISO8601e$B7A<0e(B(e$B$?$@$76h@Z$j$Ne(BTe$B$O;H$o$J$$e(B)e$B$K$7$he(B
e$B$&$H;W$C$F$$$^$9!#85!9e(B1.8e$B$NHO0OFb$G$O>.$5$JJQ99$K$7$F!"e(B1.9e$B$Ne(B
e$B$H$-$KBg$-$JJQ99$K$7$h$&$H;W$C$F$$$^$7$?$+$i!#e(B

e$B$H$$$&$o$1$G!“:#$5$i$G$O$”$j$^$9$,!";d$Oe(B

1.8e$B$NHO0OFb$G$Oe(BRFC2822e$B$O:NMQ$;$:!"e(BTimezonee$B$r?tCMI=8=$K$9e(B
e$B$k$@$1e(B(e$B$D$^$j!"e(B1.8.5e$B$N>uBV$KLa$9e(B)

  • 1.9e$B$Ge(BISO8601e$B7A<0$Ke(B

e$B$H$$$&$N$rDs0F$7$^$9!#$,!“$9$C$+$jK:$l$FJ|CV$7$F$$$?$N$O;d$Ge(B
e$B$9$7!”$b$&;~4|$b;~4|$G$9$+$i!":G=E$JH=CG$Oe(Bknue$B$5$s$KG$$;$^e(B
e$B$9!#e(B

e$B$^$D$b$He(B e$B$f$-$R$m$G$9e(B

In message “Re: [ruby-dev:30499] Re: Time#to_s format”
on Tue, 6 Mar 2007 15:38:38 +0900, “Akinori MUSHA”
[email protected] writes:

|e$B!!$=$l$O$5$F$*$-!"e(B inspect e$B$Oe(B usec e$B$r4^$`7A<0$KJQ$($?J}$,$$$$$se(B
|e$B$8$c$J$$$G$7$g$&$+!#e(B(ctime e$B$de(B RFC 2822 e$B$Oe(B usec e$B$r4^$a$i$l$J$$e(B)

e$B$=$&$G$9$M$(!#e(BYAMLe$B7A<0$K$“$o$;$k$+$J$”!#e(B

|> e$B$G!"e(BRuby 1.9e$B$G$Oe(BISO8601e$B7A<0e(B(e$B$?$@$76h@Z$j$Ne(BTe$B$O;H$o$J$$e(B)e$B$K$7$he(B
|> e$B$&$H;W$C$F$$$^$9!#85!9e(B1.8e$B$NHO0OFb$G$O>.$5$JJQ99$K$7$F!“e(B1.9e$B$Ne(B
|> e$B$H$-$KBg$-$JJQ99$K$7$h$&$H;W$C$F$$$^$7$?$+$i!#e(B
|
|e$B!!e(B1.9 e$B$Ne(B rdoc e$B$O<BAu$rH?1G$7$F$$$^$;$s!#:#$N;EMM$Oe(B ISO 8601
|e$B$G$be(B YAML e$B=`5r$G$b$J$/CfESH>C<$J$N$G!”$3$N5!2q$K<BAu$bJQ$($Fe(B
|e$B$7$^$C$?J}$,$$$$$H;W$$$^$9$,!#e(B

e$B$=$&$G$9$M!#8=>ue(BISO8601e$B$K9g$C$F$J$$ItJ,$,$“$k$N$O3N$+$G$9!#e(B
e$B%?%$%`%>!<%s$N!Ve(BZe$B!W$,5$$KF~$i$J$$$s$G$9$h$M$(!#e(B
e$BBE6($9$k$+$J$”!#e(B