-
Bug
-
Resolution: Not an Issue
-
P3
-
None
-
11, 12
ADDITIONAL SYSTEM INFORMATION :
Confirmed on Ubuntu x64 Linux and Windows 10.
A DESCRIPTION OF THE PROBLEM :
JDK 8's ZonedTimeTime.parse() correctly parses a date+time with MST correctly but with JDK 11 (and also JDK10.0.2) the value is incorrectly parsed.
REGRESSION : Last worked in version 8u181
STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
Run the attached test case.
EXPECTED VERSUS ACTUAL BEHAVIOR :
EXPECTED -
Correctly parsed value using Java 8:
Original value: 2017-01-12T23:00MST
Converted value: 2017-01-12T23:00-07:00[America/Denver]
ACTUAL -
Incorrectly result using Java 10 and 11ea:
Original value: 2017-01-12T23:00MST
Converted value: 2017-01-12T16:00-07:00[America/Denver]
---------- BEGIN SOURCE ----------
import java.time.ZoneOffset;
import java.time.ZonedDateTime;
import java.time.format.DateTimeFormatter;
import java.time.format.DateTimeFormatterBuilder;
import java.time.temporal.ChronoField;
public class ZonedDateTimeTestCase {
// comprehensive pattern to handle any type of ISO8601 Date / Date-Time
private static final String comprehensivePattern = "[yyyyMMdd][yyyy-MM-dd][yyyy-DDD]"
+ "['T'[HHmmss][HHmm][HH:mm:ss][HH:mm][.SSSSSSSSS]"
+ "[.SSSSSS][.SSS][.SS][.S]][OOOO][O][z][XXXXX][XXXX]['['VV']']";
// formatter used to parse an ISO8601 string using the comprehensive pattern
// pattern includes default values for time in case time information is missing
private static final DateTimeFormatter dateFormatter = new DateTimeFormatterBuilder()
.append(DateTimeFormatter.ofPattern(comprehensivePattern))
.parseDefaulting(ChronoField.OFFSET_SECONDS, ZoneOffset.UTC.getTotalSeconds())
.parseDefaulting(ChronoField.HOUR_OF_DAY, 0)
.parseDefaulting(ChronoField.MINUTE_OF_HOUR, 0)
.parseDefaulting(ChronoField.SECOND_OF_MINUTE, 0)
.toFormatter();
private static final String testDate1 = "2017-01-12T23:00MST";
public static final void main(String[] args) {
final ZonedDateTime convertedValue = ZonedDateTime.parse(testDate1, dateFormatter);
System.out.println(" Original value: " + testDate1);
System.out.println(" Converted value: " + convertedValue.toString());
}
}
---------- END SOURCE ----------
CUSTOMER SUBMITTED WORKAROUND :
None that I'm aware of.
FREQUENCY : always
Confirmed on Ubuntu x64 Linux and Windows 10.
A DESCRIPTION OF THE PROBLEM :
JDK 8's ZonedTimeTime.parse() correctly parses a date+time with MST correctly but with JDK 11 (and also JDK10.0.2) the value is incorrectly parsed.
REGRESSION : Last worked in version 8u181
STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
Run the attached test case.
EXPECTED VERSUS ACTUAL BEHAVIOR :
EXPECTED -
Correctly parsed value using Java 8:
Original value: 2017-01-12T23:00MST
Converted value: 2017-01-12T23:00-07:00[America/Denver]
ACTUAL -
Incorrectly result using Java 10 and 11ea:
Original value: 2017-01-12T23:00MST
Converted value: 2017-01-12T16:00-07:00[America/Denver]
---------- BEGIN SOURCE ----------
import java.time.ZoneOffset;
import java.time.ZonedDateTime;
import java.time.format.DateTimeFormatter;
import java.time.format.DateTimeFormatterBuilder;
import java.time.temporal.ChronoField;
public class ZonedDateTimeTestCase {
// comprehensive pattern to handle any type of ISO8601 Date / Date-Time
private static final String comprehensivePattern = "[yyyyMMdd][yyyy-MM-dd][yyyy-DDD]"
+ "['T'[HHmmss][HHmm][HH:mm:ss][HH:mm][.SSSSSSSSS]"
+ "[.SSSSSS][.SSS][.SS][.S]][OOOO][O][z][XXXXX][XXXX]['['VV']']";
// formatter used to parse an ISO8601 string using the comprehensive pattern
// pattern includes default values for time in case time information is missing
private static final DateTimeFormatter dateFormatter = new DateTimeFormatterBuilder()
.append(DateTimeFormatter.ofPattern(comprehensivePattern))
.parseDefaulting(ChronoField.OFFSET_SECONDS, ZoneOffset.UTC.getTotalSeconds())
.parseDefaulting(ChronoField.HOUR_OF_DAY, 0)
.parseDefaulting(ChronoField.MINUTE_OF_HOUR, 0)
.parseDefaulting(ChronoField.SECOND_OF_MINUTE, 0)
.toFormatter();
private static final String testDate1 = "2017-01-12T23:00MST";
public static final void main(String[] args) {
final ZonedDateTime convertedValue = ZonedDateTime.parse(testDate1, dateFormatter);
System.out.println(" Original value: " + testDate1);
System.out.println(" Converted value: " + convertedValue.toString());
}
}
---------- END SOURCE ----------
CUSTOMER SUBMITTED WORKAROUND :
None that I'm aware of.
FREQUENCY : always
- relates to
-
JDK-8066982 ZonedDateTime.parse() returns wrong ZoneOffset around DST fall transition
-
- Resolved
-