Если вы измените строку:
String date = convertDate(opDate, "yyyyMMdd");
до:
String date = convertDate(opDate, "EEE MMM dd HH:mm:ss zzz yyyy");
вы можете увидеть вывод вашей программы:
opDate: Tue Jan 03 00:00:00 MSK 2006
date: Mon Jan 02 20:00:00 GMT 2006
Вы плохо настраиваете TimeZone с помощью:
df.setTimeZone(TimeZone.getTimeZone("Russia/Moscow"));
вам нужно:
df.setTimeZone(TimeZone.getTimeZone("Europe/Moscow"));
Наконец, есть летняя задержка в 1 час.