@Test
public void threeLetterIso8601withTimeZone() throws Exception {

    Calendar fromJson1 = calendarAdapter().fromJson("\"2003-04-21T16:42:11+02:00\"");
    Calendar fromJson2 = calendarAdapter().fromJson("\"2016-07-21T17:59:59-04:00\"");
    assertThat(fromJson1).isNotNull();
    assertThat(fromJson2).isNotNull();
    assertThat(fromJson1.isSet(Calendar.SECOND)).isTrue();
    assertThat(fromJson1.isSet(Calendar.MINUTE)).isTrue();
    assertThat(fromJson1.isSet(Calendar.HOUR)).isTrue();
    assertThat(fromJson1.isSet(Calendar.DAY_OF_MONTH)).isTrue();
    assertThat(fromJson1.isSet(Calendar.MONTH)).isTrue();
    assertThat(fromJson1.isSet(Calendar.YEAR)).isTrue();
    assertThat(fromJson2.isSet(Calendar.SECOND)).isTrue();
    assertThat(fromJson2.isSet(Calendar.MINUTE)).isTrue();
    assertThat(fromJson2.isSet(Calendar.HOUR)).isTrue();
    assertThat(fromJson2.isSet(Calendar.DAY_OF_MONTH)).isTrue();
    assertThat(fromJson2.isSet(Calendar.MONTH)).isTrue();
    assertThat(fromJson2.isSet(Calendar.YEAR)).isTrue();
    assertThat(fromJson1.get(Calendar.YEAR)).isEqualTo(2003);
    assertThat(fromJson1.get(Calendar.MONTH)).isEqualTo(Calendar.APRIL);
    assertThat(fromJson1.get(Calendar.DAY_OF_MONTH)).isEqualTo(21);
    assertThat(fromJson1.get(Calendar.HOUR_OF_DAY)).isEqualTo(16);
    assertThat(fromJson1.get(Calendar.MINUTE)).isEqualTo(42);
    assertThat(fromJson1.get(Calendar.SECOND)).isEqualTo(11);
    assertThat(fromJson1.getTimeZone()).isEqualTo(TimeZone.getTimeZone("CET"));
    assertThat(fromJson2.get(Calendar.YEAR)).isEqualTo(2016);
    assertThat(fromJson2.get(Calendar.MONTH)).isEqualTo(Calendar.JULY);
    assertThat(fromJson2.get(Calendar.DAY_OF_MONTH)).isEqualTo(21);
    assertThat(fromJson2.get(Calendar.HOUR_OF_DAY)).isEqualTo(23);
    assertThat(fromJson2.get(Calendar.MINUTE)).isEqualTo(59);
    assertThat(fromJson2.get(Calendar.SECOND)).isEqualTo(59);
    assertThat(fromJson1.getTimeZone()).isEqualTo(TimeZone.getTimeZone("CET"));
}