Avoid using the java.util.Date & .Calendar and java.text.SimpleTextFormat classes. They are notoriously troublesome.
Joda-Time
Using the third-party open-source Joda-Time 2.3 library, you can pass that ISO 8601 formatted string directly to a constructor. No need for formatters and parsers.
However, like java.util.Date, Joda-Time has a resolution of milliseconds. So it can handle only the first 3 digits of your fraction of a second. Fortunately though, rather than through an exception, Joda-Time simply truncates (ignores) the latter extra fractional digits.
String s = "2014-01-20T07:17:06.150995+00:00";
DateTime dateTime = new DateTime( s );
System.out.println( "dateTime: " + dateTime );
System.out.println( "dateTime in UTC/GMT: " + dateTime.toDateTime( DateTimeZone.UTC ) );
When run…
dateTime: 2014-01-19T23:17:06.150-08:00
dateTime in UTC/GMT: 2014-01-20T07:17:06.150Z
java.time.* Classes
The new classes bundled with Java 8, in the java.time.* package, supplant the java.util.Date & .Calendar classes. They are inspired by Joda-Time but are entirely re-architected. JSR 310 defines these classes.
These new classes have a resolution of nanoseconds rather than milliseconds, so they can handle all six of your fractional digits. Like Joda-Time, they take an ISO 8601 string directly.
String s = "2014-01-20T07:17:06.150995+00:00";
ZonedDateTime zdt = ZonedDateTime.parse( s );
System.out.println( "zdt: " + zdt );
When run…
zdt: 2014-01-20T07:17:06.150995Z