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 ...