Skip to content

Commit 1dd6d30

Browse files
committed
Fix "+00:00" and 0 being treated as UTC by Time#localtime and Time.at.
Time#utc? should return false when setting the offset to either "+00:00" or 0. Fixes jruby#8998.
1 parent f04e24b commit 1dd6d30

1 file changed

Lines changed: 7 additions & 8 deletions

File tree

core/src/main/java/org/jruby/RubyTime.java

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -628,15 +628,14 @@ public RubyTime localtime(ThreadContext context) {
628628

629629
@JRubyMethod(name = "localtime")
630630
public RubyTime localtime(ThreadContext context, IRubyObject arg) {
631-
final DateTimeZone zone = getTimeZoneFromUtcOffset(context, arg);
631+
setIsTzRelative(false);
632+
final DateTimeZone zone = handleUTCDateTimeZone(context, arg);
632633

633634
if (zone == null) {
634635
throw invalidUTCOffset(context);
635-
} else if (zone == DateTimeZone.UTC) {
636-
return gmtime(context);
637636
}
638637

639-
return adjustTimeZone(context, zone, true);
638+
return adjustTimeZone(context, zone, isTzRelative);
640639
}
641640

642641
private RubyTime adjustTimeZone(ThreadContext context, final DateTimeZone zone, boolean isTzRelative) {
@@ -2300,15 +2299,15 @@ public static RubyTime timeZoneLocal(ThreadContext context, IRubyObject off, Rub
23002299

23012300
if (zoneLocalTime(context, zone, time)) return time;
23022301

2303-
if ((dtz = getTimeZoneFromUtcOffset(context, off)) == null) {
2302+
time.setIsTzRelative(false);
2303+
2304+
if ((dtz = time.handleUTCDateTimeZone(context, off)) == null) {
23042305
zone = time.findTimezone(context, zone);
23052306
if (!zoneLocalTime(context, zone, time)) throw invalidUTCOffset(context, zone);
23062307
return time;
2307-
} else if (dtz == DateTimeZone.UTC) {
2308-
return time.gmtime(context);
23092308
}
23102309

2311-
time.adjustTimeZone(context, dtz, false);
2310+
time.adjustTimeZone(context, dtz, time.isTzRelative);
23122311

23132312
return time;
23142313
}

0 commit comments

Comments
 (0)