From: akr@... Date: 2014-05-04T01:48:09+00:00 Subject: [ruby-core:62337] [ruby-trunk - Bug #9794] DateTime.strptime() doesn't work correctly for '%s %z' Issue #9794 has been updated by Akira Tanaka. tadayoshi funaba wrote: > > ������������������������������������������������������������������������������ > ���������������������������������������UTC������������������������������������������������������������������������������������ > ������ %s ������������������ ��������������������������������������������������������������������������������������������� ���������������������2��������������������������������������������������������������� > ���������������������������UTC������������������������������������������ > ������������������������������������������������������������������ > ������������������������UTC��������������������� +09:00 ��������������������������������� > > 2001-02-03T04:05:06 UTC (+0900) > > ��������������������������� > `DateTime.parse('2001-02-03T04:05:06 UTC').new_offset('+0900')` > ��������������������������������������������������������������� ������������������������������������������������ ISO 8601 ������������ 2001-02-03T04:05:06Z ��������������������������������������������� 2001-02-03T04:05:06 UTC (+0900) ��������������������������������������������������������� ��������������������������� DateTime ��������������������������� DateTime.parse('2001-02-03T04:05:06 UTC').new_offset('+0900') ������������������������������������������������������������������������������������ > ��������������������������������� ruby ������������������������'%s %z' ��������������������������������������������������������������������������������������������������������������������������������������������������������������������� ��������������������������������������������������� DateTime ��������������������������������������������������������������������� ������������������������������������������������������������������������������������������ > ��������������������������������������������������������������������������� > ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������� > ������������������������������������������������������������������������������ > ������������������������������������������������������������������������������������������������������ ��������������� ��������������������������������������������������������������� ������������������������������������������������������ ������������������������������������������������������������������������������������������������������������ ������������������������������������������������������������������������������ ��������������������������������������������������� ��������������������������������������������������������� ������������������������(���������������������������������������) ��������������������������������������������������������������������������������������������� ��������������������������������������� Unix Epoch ��������������������������������������������� (������) ������������������������������ ��������������������������������������������������� * ISO 8601 ��� Z ������������ 1970-01-01T00:00:00Z * ISO 8601 ��� +09:00 ������������ 1970-01-01T09:00:00+09:00 * ISO 8601 ��� -08:00 ������������ 1969-12-31T16:00:00-08:00 * RFC 2822 ��� +0000 ������������ Thu, 01 Jan 1970 00:00:00 +0000 * RFC 2822 ��� +0900 ������������ Thu, 01 Jan 1970 09:00:00 +0900 * RFC 2822 ��� -0800 ������������ Wed, 31 Dec 1969 16:00:00 -0800 * Unix Epoch ��������������������������� 0 * ��������������������������� 2440587.5 ������������ Time ��� DateTime ��������������������������������������������� ��������� == ������������������������������������������������������������������������������ ������������������������������������������������������������������������������������ ������������ 1970-01-01T00:00:00Z ��� Time ��������������������������� hour ������������������������������ 0 ������������ 1970-01-01T09:00:00+09:00 ��� Time ��������������������������� hour ������������������������������ 9 ������������ ��������������������������������������������������� ��������� 1970-01-01T00:00:00Z ��� Time ��������������������������� utc_offset ������������������������������ 0 ������������ 1970-01-01T09:00:00+09:00 ��� Time ��������������������������� utc_offset ������������������������������ 32400 ������������ ��������������������������������������������������� ��������������������������������������������������������������������������������������������������������������� ��������������������������������� Time ��������������� UTC, OS��������������������������������������������������������������������� ������������������������������������������ (UTC ���������������) ������������������������������������������ ������������������ Time ������������������������������������������������������������������������������������������������������������������������ ��������������������������������������������������� DateTime ������������������������������ DateTime ������������������������������������������ ������������Unix Epoch ������������������������������������������������������������������������������������������������������������������������ ��������������������������������� 2440587.5 ��� Time ��������������������������� hour ��������������������������������������� ���������������������������������������������0 ������12 ��������������������������������������������� ��������������������������������������������������������������� ������������������������������������������������������������������������������������������������������������������������ ��������������������������������������������������������������������������� %s %z ������Time ��������������������������������������� ������������������������������������ utc_offset ������������������������������������������������������������������ ��������������������������������������������������������� > > > ������������������������������������������������������������������������������������������������ > > > > ������������������������������������������������OS ��������������������������������������������� > > UTC ������������������������������������������������������������������������������������ > > ������������������������������������������������������������������������������������������������ > > ������������������������������������������������ %s %z ��� Time ��������������������������������������������� ������������������������������������ utc_offset ��������������������������������������������������������� ��������������������������������������������� > %s ������������������������������������������������������������������������������������������������ > > %s ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ ��������������� Unix Epoch (1970-01-01T00:00:00Z) ��������������������������������� ������������������������������������������������������������������������������������������������������������������ ��������������������������������������������� ���������������������������������������������4713���1���1������������������������������������ ������������������������������������������������������������������������������������ ������������������������������������������������������������������������������������ > ��������������������������������������������������������������������������������������������������������������������������������������� > > ������������������������������������������������������������������������������������=��������������������� > ������������������������������������������������������ > > ��������������������������������������������������������������������������������������������������� ������������������������������������������ ������������������������������������������������������������������������������������������ (������ JST ���������������������������������������) Time ���������������������������������������������������������Time#+ ������������������������������������������������������������ ������������������������������������������������������������������������������������������ ��������������������������������������������������������������������������������� ������������������������������������������������������������������������������������������������������������������������������ ������������������������������������������������������������ ��������������������������������������������������������������������������������������������������������������������� > ���������������������������������%s ��������������������������������������������� ��������� %s ������������������������������������������������������������������������ ������������������������������������������������������������ ---------------------------------------- Bug #9794: DateTime.strptime() doesn't work correctly for '%s %z' https://bugs.ruby-lang.org/issues/9794#change-46493 * 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/