--- old/src/java.xml/share/classes/com/sun/org/apache/xerces/internal/jaxp/datatype/XMLGregorianCalendarImpl.java 2020-08-06 05:48:19.590683450 +0000 +++ new/src/java.xml/share/classes/com/sun/org/apache/xerces/internal/jaxp/datatype/XMLGregorianCalendarImpl.java 2020-08-06 05:48:19.287675689 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2004, 2018, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2004, 2020, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -32,6 +32,7 @@ import java.math.BigDecimal; import java.math.BigInteger; import java.math.RoundingMode; +import java.util.Arrays; import java.util.Calendar; import java.util.Date; import java.util.GregorianCalendar; @@ -190,7 +191,7 @@ * @author Sunitha Reddy * @see javax.xml.datatype.Duration * @since 1.5 - * @LastModified: June 2018 + * @LastModified: Aug 2020 */ public class XMLGregorianCalendarImpl @@ -1720,8 +1721,15 @@ if (timezone != 0) { gc = this.normalizeToTimezone(getTimezone()); } - return gc.getYear() + gc.getMonth() + gc.getDay() + - gc.getHour() + gc.getMinute() + gc.getSecond(); + + BigInteger ey = gc.getEonAndYear(); + int result = 31 + ((ey == null) ? 0 : ey.hashCode()); + int[] elements = {gc.getMonth(), gc.getDay(), gc.getHour(), + gc.getMinute(), gc.getSecond()}; + result = 31 * result + Arrays.hashCode(elements); + BigDecimal fs = gc.getFractionalSecond(); + result = 31 * result + ((fs == null) ? 0 : fs.hashCode()); + return result; }