Project

General

Profile

Actions

Bug #18978

closed

Unexpected behaviour in Time.utc and Time.local when 8 arguments are passed in

Added by peterzhu2118 (Peter Zhu) over 1 year ago. Updated over 1 year ago.

Status:
Feedback
Assignee:
-
Target version:
-
[ruby-core:109692]

Description

GitHub PR: https://github.com/ruby/ruby/pull/6281

Time.utc and Time.local produce inconsistent and unexpected behaviour when 8 arguments is passed in.

For example, consider the following code:

Time.utc(2000, 1, 1, 2, 3, 4, 100)

Here's the output on various Ruby implementations:

MRI: 2000-01-01 02:03:04.0001 UTC
TruffleRuby: 2000-01-01 02:03:04.0001 UTC
Opal: 2000-01-01 02:03:04 UTC

If we add an additional argument:

Time.utc(2000, 1, 1, 2, 3, 4, 100, 1)

The behaviour changes unexpectedly on MRI:

MRI: 2000-01-01 02:03:04 UTC
TruffleRuby: 2000-01-01 02:03:04.0001 UTC
Opal: 2000-01-01 02:03:04 UTC

Notice that the subseconds are lost.

The PR changes it so that 8 arguments is not accepted into the methods (i.e. an ArgumentError is raised when 8 arguments is passed in). Alternatively, we could have similar behaviour as TruffleRuby, where the 8th argument is ignored. However, since the 8th argument is unused, I think it would be less confusing to the user and prevent mistakes if we raised an ArgumentError forbidding it.

Actions

Also available in: Atom PDF

Like0
Like0Like0Like0Like0