From ddd3378b3ee5151e5f9998dc5761ded1819ca537 Mon Sep 17 00:00:00 2001 From: "Bala.FA" Date: Mon, 27 Jun 2016 20:07:21 +0530 Subject: [PATCH] fix: date parsing throws IllegalArgumentException. When minio-java is used in system running with different locale than "US", date parsing fails with IllegalArgumentException. This patch fixes the issue by setting the locale to "US" for all date formats. Thanks to @RBoelter for reporting/debugging/providing the solution. Fixes #411 --- build.gradle | 10 ++++++++++ src/main/java/io/minio/DateFormat.java | 11 +++++++---- 2 files changed, 17 insertions(+), 4 deletions(-) diff --git a/build.gradle b/build.gradle index d9f268e45..2085dac46 100644 --- a/build.gradle +++ b/build.gradle @@ -113,6 +113,16 @@ task javadocJar (type: Jar, dependsOn: javadoc) { from javadoc.destinationDir } +task localeTest (type: Test) { + description = "Runs tests with locale" + System.setProperty('user.language', 'de') + System.setProperty('user.country', 'DE') + systemProperties = System.properties + dependsOn test +} + +check.dependsOn localeTest + javadoc.options { encoding = 'UTF-8' links 'https://docs.oracle.com/javase/8/docs/api/' diff --git a/src/main/java/io/minio/DateFormat.java b/src/main/java/io/minio/DateFormat.java index 043ee56bc..6465aa629 100644 --- a/src/main/java/io/minio/DateFormat.java +++ b/src/main/java/io/minio/DateFormat.java @@ -16,6 +16,8 @@ package io.minio; +import java.util.Locale; + import org.joda.time.format.DateTimeFormat; import org.joda.time.format.DateTimeFormatter; @@ -25,17 +27,18 @@ */ public class DateFormat { public static final DateTimeFormatter AMZ_DATE_FORMAT = - DateTimeFormat.forPattern("yyyyMMdd'T'HHmmss'Z'").withZoneUTC(); + DateTimeFormat.forPattern("yyyyMMdd'T'HHmmss'Z'").withZoneUTC().withLocale(Locale.US); public static final DateTimeFormatter EXPIRATION_DATE_FORMAT = - DateTimeFormat.forPattern("yyyy-MM-dd'T'HH':'mm':'ss'.'SSS'Z'").withZoneUTC(); + DateTimeFormat.forPattern("yyyy-MM-dd'T'HH':'mm':'ss'.'SSS'Z'").withZoneUTC().withLocale(Locale.US); public static final DateTimeFormatter RESPONSE_DATE_FORMAT = EXPIRATION_DATE_FORMAT; - public static final DateTimeFormatter SIGNER_DATE_FORMAT = DateTimeFormat.forPattern("yyyyMMdd").withZoneUTC(); + public static final DateTimeFormatter SIGNER_DATE_FORMAT = + DateTimeFormat.forPattern("yyyyMMdd").withZoneUTC().withLocale(Locale.US); public static final DateTimeFormatter HTTP_HEADER_DATE_FORMAT = - DateTimeFormat.forPattern("EEE',' dd MMM yyyy HH':'mm':'ss zzz").withZoneUTC(); + DateTimeFormat.forPattern("EEE',' dd MMM yyyy HH':'mm':'ss zzz").withZoneUTC().withLocale(Locale.US); private DateFormat() {} }