1

我正在尝试散列我的对象:

protected XMLGregorianCalendar startTime;

getStartTime() 的值为2018-06-21T12:04:10.000Z

XMLGregorianCalendar 底部的 hashCode 方法不处理毫秒,因此即使我使用具有不同毫秒值的startTime (如2018-06-21T12:04:10.111Z ),我也永远不会得到唯一的 hashCode

除非我更改秒、分钟、小时等,否则2018-06-21T12 :04:10.000Z和2018-06-21T12 :04:10.111Z 都会产生相同的哈希码。我需要它还考虑毫秒.

是否有不同的 hashCode() 方法可以处理这个问题?我怎样才能做到这一点?

   public int hashCode() {

        // Following two dates compare to EQUALS since in different timezones.
        // 2000-01-15T12:00:00-05:00 == 2000-01-15T13:00:00-04:00
        //
        // Must ensure both instances generate same hashcode by normalizing
        // this to UTC timezone.
        int timezone = getTimezone();
        if (timezone == DatatypeConstants.FIELD_UNDEFINED) {
            timezone = 0;
        }
        XMLGregorianCalendar gc = this;
        if (timezone != 0) {
            gc = this.normalize();
        }
        return gc.getYear()
                + gc.getMonth()
                + gc.getDay()
                + gc.getHour()
                + gc.getMinute()
                + gc.getSecond(); //Where's milliseconds???
    }
4

0 回答 0