Issue #9794 has been updated by Akira Tanaka.


tadayoshi funaba wrote:
> 
> > ここで、Unix Epoch からの秒数やユリウス日はこの異なり方の選択肢をどう選ぶべきか自明ではありません。
> 
> しかし、それは Time の場合は自明である地方時、DateTime では UTC という事になっているし、そういう形式なんで仕方がないと思います。
> そういう積極的でない時間帯の選択は俺は勝手に「匿名」と読んで許容しています。厳密にはそういうのを別に識別する仕掛けがあるほうがいいのでしょうが。

はい。Time や DateTime のインターフェースで hour がないとかは許しがたいので、
なにかを選ばざるを得ないと思います。

> %s %z は「今x秒です」「オレ %z の時差で生活してます」という感じで
> たしかに同じ時刻について言ってるのは確かなんだけど、まるで別の事ではないかと思います。

ふむ。これは示唆的です。

もしかして、DateTime.strptime に与えるフォーマットに時刻 (時間軸上の点) を同定するのに関係しない要素は与えるべきでない、
と感じるという話でしょうか。

(念のために書いておくと、時刻を同定するのに関係しない要素というのは "%s %z" における %z のことです。)


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

* 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/