Here is a problem:

Think of two MyObjects, both have getDate() return null.

If you compare (mo1, mo2) you get -1, and if you compare (mo2, mo1) you get -1 too.

The same is true for getID.

The javadocs say:

The ordering imposed by a Comparator c on a set of elements S is said to be consistent with equals if and only if (compare((Object)e1, (Object)e2)==0) has the same boolean value as e1.equals((Object)e2) for every e1 and e2 in S.

You claim not to override equals.

Well. If (o1 != o2) but

((o1.getDate().equals (o2.getDate ())) AND (o1.getId ().equals (o2.getId ()))) o1.equals(o2) will return false, but compareTo (o1, o2) will return 0.

You should override equals and check for

(o1.getDate () == null && o2.getDate () == null) and

..getId ...