Forum: Ruby-core DateTime.strptime() doesn't work correctly for '%s %z'

31e9336577dcba34f9ea8025a763c900?d=identicon&s=25 unknown (Guest)
on 2014-05-03 14:05
(Received via mailing list)
Issue #9794 has been updated by tadayoshi funaba.


Akira Tanaka wrote:
> tadayoshi funaba wrote:

> 「そこにオブジェクトを見てる」というのがどのような意味なのかわかりません。

伝わらないのでちょっと別の話をします。

Date.today.ctime #=> "Sat May  3 00:00:00 2014"

これは普通の日付ですよね。
これの Sat を Fri 書き換えると間違った日付です。

たしか、php のライブラリだったと思うけど、こういうのを入力すると
2014-05-02 とか 2014-05-09 なんかが返ってくるものがありました。
これはもう日付というよりコマンド言語みたいなもんですよね。
田中さんの説明からも '%s %z' はそういう部類という事だと思います。

俺は strptime でも parse でもそういうのは避けてました。
とくに strptime ではやったらいけないと思ってます。

> 「%s の表現方法は繰り返しですが %s です。」というのはそのような意味でしょうか?

田中さんは日付それ自体を見てないんじゃないでしょうか。
逆転してると思いますが、日付オブジェクトの外部表現が日付だと思ってるのでは。

時差に特別な意味があると思えば地方時で記述すればいいと思います。

> ふなばさんはそれが提案者の動機だとは考えられないのでしょうか。

ていうか今しがた知ったという感じですが。
とくかくバグだから直せって話しか聞いた覚えがありません。

> というわけで Time.strptime('20010203 -0200', '%Y%m%d %z') の場合でもそうするようにしてみました。

うーん、それはそれでいいのかどうか判りませんが。


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

* 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)
This topic is locked and can not be replied to.