Issue #9794 has been updated by tadayoshi funaba.


> ここで興味の対象は "%s %z" がなぜいけないのか、という点です。
> 
> 私の思ったのは、もし、ふなばさんが DateTime.strptime に与えるフォーマットに時刻 (時間軸上の点) を
> 同定するのに関係しない要素は与えるべきでない、と感じるとすれば、
> フォーマットに "%s %z" を与えるのは %z がまさに関係しない要素なので、
> 提案に否定的になるということが理解できる、というものです。

質問の意図が理解しきれていないかもしれませんが、望ましくはないと思います。
ただ、それと俺の判断に関係があるのかな。

> 読み飛ばすという使い方については私には関係性が見出せませんでした。

Date.strptime('Sun May  4 00:00:00 2014', '%a %b %d %T %Y')

これは典型的な日付ですが、田中さんのいう点を打つには Sun は余分ですが
これを拒否する事はできないと考えるべきでしょう。

DateTime.strptime('2001-02-03/2014-05-04', '%F/%F')

このようなものは望ましいとは言えないと思います。
濫用や誤解の元になるようなのは良くないと思います。
質問の意図と違うかもしれませんが。



----------------------------------------
Bug #9794: DateTime.strptime() doesn't work correctly for '%s %z'
https://bugs.ruby-lang.org/issues/9794#change-46504

* Author: Felipe Contreras
* Status: Rejected
* Priority: Low
* Assignee: tadayoshi funaba
* Category: ext
* Target version: 
* ruby -v: 2.1.1p76
* Backport: 2.0.0: UNKNOWN, 2.1: UNKNOWN
----------------------------------------
Time.strptime() works correctly:

    Time.strptime('0 +0100', '%s %z').strftime('%s %z')
    => "0 +0100"

But DateTime.strptime() doesn't:

    DateTime.strptime('0 +0100', '%s %z').strftime('%s %z')
    => "0 +0000"

In Rubinious it does work correctly:

    DateTime.strptime('0 +0100', '%s %z').strftime('%s %z')
    => "0 +0100"

This make the RubySL date space fail:

    DateTime#strptime parses seconds and timezone correctly FAILED
    Expected "1970-01-01T00:00:00+00:00"
     to equal "1970-01-01T01:00:00+01:00"

In addition, both C and perl preserver the offset correctly when doing '%s %z'.

So it's very clear DateTime.strptime() has to be fixed.

Patch attached.

---Files--------------------------------
0001-datetime-fix-strptime-s-z.patch (1.94 KB)


-- 
https://bugs.ruby-lang.org/