The problem with S
is that it will produce three digit milli-seconds but will not parse three digits.
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ");
System.out.println(sdf.parse("2011-06-07T14:08:59.697-0700"));
prints
Tue Jun 07 22:08:59 BST 2011
It appears you need to remove the :
in the timezone.