Fixes issue where glance fails to parse image details with milli seconds in the date
diff --git a/openstack-glance/src/main/java/org/jclouds/openstack/glance/v1_0/functions/ParseImageDetailsFromHeaders.java b/openstack-glance/src/main/java/org/jclouds/openstack/glance/v1_0/functions/ParseImageDetailsFromHeaders.java
index 776604d..4c4ea78 100644
--- a/openstack-glance/src/main/java/org/jclouds/openstack/glance/v1_0/functions/ParseImageDetailsFromHeaders.java
+++ b/openstack-glance/src/main/java/org/jclouds/openstack/glance/v1_0/functions/ParseImageDetailsFromHeaders.java
@@ -68,8 +68,8 @@
                 .minDisk(Long.parseLong(from.getFirstHeaderOrNull(MIN_DISK.asHeader())))
                 .minRam(Long.parseLong(from.getFirstHeaderOrNull(MIN_RAM.asHeader())))
                 .isPublic(Boolean.parseBoolean(from.getFirstHeaderOrNull(IS_PUBLIC.asHeader())))
-                .createdAt(dateService.iso8601SecondsDateParse(from.getFirstHeaderOrNull(CREATED_AT.asHeader())))
-                .updatedAt(dateService.iso8601SecondsDateParse(from.getFirstHeaderOrNull(UPDATED_AT.asHeader())))
+                .createdAt(dateService.iso8601DateOrSecondsDateParse(from.getFirstHeaderOrNull(CREATED_AT.asHeader())))
+                .updatedAt(dateService.iso8601DateOrSecondsDateParse(from.getFirstHeaderOrNull(UPDATED_AT.asHeader())))
                 .owner(from.getFirstHeaderOrNull(OWNER.asHeader()))
                 .location(from.getFirstHeaderOrNull(LOCATION.asHeader()))
                 .status(Status.fromValue(from.getFirstHeaderOrNull(STATUS.asHeader())));
diff --git a/openstack-glance/src/test/java/org/jclouds/openstack/glance/v1_0/functions/ParseImageDetailsFromHeadersTest.java b/openstack-glance/src/test/java/org/jclouds/openstack/glance/v1_0/functions/ParseImageDetailsFromHeadersTest.java
index 920524c..8e25200 100644
--- a/openstack-glance/src/test/java/org/jclouds/openstack/glance/v1_0/functions/ParseImageDetailsFromHeadersTest.java
+++ b/openstack-glance/src/test/java/org/jclouds/openstack/glance/v1_0/functions/ParseImageDetailsFromHeadersTest.java
@@ -59,10 +59,39 @@
                                                 .build())
                                        .build();
 
+   public HttpResponse responseWithDateMilli = HttpResponse.builder()
+                                       .message("HTTP/1.1 200 OK")
+                                       .statusCode(200)
+                                       .headers(ImmutableMultimap.<String, String>builder()
+                                                .put("X-Image-Meta-Id", "fcc451d0-f6e4-4824-ad8f-70ec12326d07")
+                                                .put("X-Image-Meta-Deleted", "False")
+                                                .put("X-Image-Meta-Container_format", "bare")
+                                                .put("X-Image-Meta-Checksum", "233afa7b8809d840679b5f0d36d7350a")
+                                                .put("X-Image-Meta-Protected", "False")
+                                                .put("X-Image-Meta-Min_disk", "0")
+                                                .put("X-Image-Meta-Created_at", "2012-05-18T18:06:44.000+0000")
+                                                .put("X-Image-Meta-Size", "65645798")
+                                                .put("X-Image-Meta-Status", "active")
+                                                .put("X-Image-Meta-Is_public", "True")
+                                                .put("X-Image-Meta-Min_ram", "0")
+                                                .put("X-Image-Meta-Owner", "5821675")
+                                                .put("X-Image-Meta-Updated_at", "2012-05-18T18:42:58.000+0000")
+                                                .put("X-Image-Meta-Disk_format", "raw")
+                                                .put("X-Image-Meta-Name", "debian")
+                                                .put("X-Image-Meta-Property-Description", "debian image description")
+                                                .put("Location", "http://HOST/v1/images/fcc451d0-f6e4-4824-ad8f-70ec12326d07")
+                                                .put("Etag", "233afa7b8809d840679b5f0d36d7350a")
+                                                .build())
+                                       .build();
+
    public void test() {
       assertEquals(fn.apply(response).toString(), expected().toString());
    }
 
+   public void testResponseWithDateMilli() {
+      assertEquals(fn.apply(responseWithDateMilli).toString(), expected().toString());
+   }
+
    public ImageDetails expected() {
       return ImageDetails.builder()
                         .id("fcc451d0-f6e4-4824-ad8f-70ec12326d07")
@@ -75,8 +104,8 @@
                         .status(Image.Status.ACTIVE)
                         .owner("5821675")
                         .isPublic(true)
-                        .createdAt(new SimpleDateFormatDateService().iso8601SecondsDateParse("2012-05-18T18:06:44"))
-                        .updatedAt(new SimpleDateFormatDateService().iso8601SecondsDateParse("2012-05-18T18:42:58"))
+                        .createdAt(new SimpleDateFormatDateService().iso8601DateOrSecondsDateParse("2012-05-18T18:06:44"))
+                        .updatedAt(new SimpleDateFormatDateService().iso8601DateOrSecondsDateParse("2012-05-18T18:42:58"))
                         .build();
    }
 }