// Rules from XML Schema Part 2 public int compareTo(Object o) { if (o instanceof DateTimeComparable) { DateTimeValue dt0 = DateTimeValue.this; DateTimeValue dt1 = ((DateTimeComparable) o).asDateTimeValue(); if (dt0.hasTimezone()) { if (dt1.hasTimezone()) { dt0 = (DateTimeValue) dt0.adjustTimezone(0); dt1 = (DateTimeValue) dt1.adjustTimezone(0); return dt0.compareTo(dt1); } else { DateTimeValue dt1max = (DateTimeValue) dt1.adjustTimezone(14 * 60); if (dt0.compareTo(dt1max) < 0) { return -1; } DateTimeValue dt1min = (DateTimeValue) dt1.adjustTimezone(-14 * 60); if (dt0.compareTo(dt1min) > 0) { return +1; } return INDETERMINATE_ORDERING; } } else { if (dt1.hasTimezone()) { DateTimeValue dt0min = (DateTimeValue) dt0.adjustTimezone(-14 * 60); if (dt0min.compareTo(dt1) < 0) { return -1; } DateTimeValue dt0max = (DateTimeValue) dt0.adjustTimezone(14 * 60); if (dt0max.compareTo(dt1) > 0) { return +1; } return INDETERMINATE_ORDERING; } else { dt0 = (DateTimeValue) dt0.adjustTimezone(0); dt1 = (DateTimeValue) dt1.adjustTimezone(0); return dt0.compareTo(dt1); } } } else { return INDETERMINATE_ORDERING; } }