ふなばです。

At 2001-01-04T16:09:24+0900 (2451913.79819JD),
ggb03124 / nifty.ne.jp (  たけ  (tk)) wrote:

>  どうでしょう?。理論的には分かりませんが Delphi の DateTime 型のデフォ
> ルトの文字列表現(DateTimeToStr)では、時刻部分が 00:00:00 のときには 
> ymd だけを文字列にするようになっています。これだと24時間のうち1秒ほど
> 困った表現になりますが、普通は日付型として扱いたい場合には時刻部分をカッ
> トしておけば(=00:00:00 にすれば)日付しか出なくなるので便利なわけです。

んー、便利なんでしょうか。

> ちなみに、date2 パッケージに date3.rb というものがあります。実験的なも
> のですが、時刻もあらわせる Date です。
> 
>  これが進化すれば Time の置き換えに使えそうですね。

date3 のようなものの需要はあると思うのですが、Time を置き換えるのはム
リですね。

> p Date.strptime( '2000-12-31' ) # nil
> 
> では駄目で、書式を指定しなければならないんですね。

もちろん。strptime とはそういうものですからね。書式は "%c" がデフォル
トになってます。

> それと、Hash を返すだけで Date オブジェクトは作られない。さらに、その 
> Hash を Date.new に送っても作ってくれない?。

strptime(3) も struct tm に要素を詰めるだけですよね。代りにハッシュを
つかっています。そして、strptime は、年なしの日付やら、曜日だけ、といっ
たものについても機能します。そういったもので、日付オブジェクトを生成す
ることは意味がありませんし、Date クラスにあるのに、変だと思うかもしれ
ませんが、date2 では時刻を表現できないので、そういう仕様にするには無理
があります。ただ、date3 向けにそういう仕掛を用意することは考えています。

> * バグめっけ。
> 
> p Date.strptime( '2000/12/31' , '%y/%m/%d' )	
> #	{:mday=>31,:mon=>12, :year=>3900}
> 
> p Date.strptime( '12/31/2000' , '%D' )	
> #	{:year=>3900, :mday=>31,:mon=>12}

んー、これはバグではありません。"%y" ではなく、"%Y" をつかうべきでした。
そして、"%D" は "%m/%d/%y" ですから。

> > time = Time.mktime(ParseDate.parsedate('1999-12-31'))	#	NG
> > time = Date.new(ParseDate.parsedate('1999-12-31'))	#	NG
> 
> これやると、どうしてタイムゾーンが反映されないんだ、とか、いわれるかな。
> 
>  しかし、Date.new( 1999, 12, 31)が既に出来るのだから、変わらないの
> では?。

?? ParseDate はタイムゾーンの略名を含む配列を返します。

ふなば ただよし