Commit 4ae8656b authored by Feng Xiao's avatar Feng Xiao

Make JsonFormat locale independent.

parent fa178802
...@@ -44,6 +44,7 @@ import java.text.SimpleDateFormat; ...@@ -44,6 +44,7 @@ import java.text.SimpleDateFormat;
import java.util.Comparator; import java.util.Comparator;
import java.util.Date; import java.util.Date;
import java.util.GregorianCalendar; import java.util.GregorianCalendar;
import java.util.Locale;
import java.util.TimeZone; import java.util.TimeZone;
/** /**
...@@ -83,7 +84,7 @@ public final class Timestamps { ...@@ -83,7 +84,7 @@ public final class Timestamps {
}; };
private static SimpleDateFormat createTimestampFormat() { private static SimpleDateFormat createTimestampFormat() {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss"); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss", Locale.ENGLISH);
GregorianCalendar calendar = new GregorianCalendar(TimeZone.getTimeZone("UTC")); GregorianCalendar calendar = new GregorianCalendar(TimeZone.getTimeZone("UTC"));
// We use Proleptic Gregorian Calendar (i.e., Gregorian calendar extends // We use Proleptic Gregorian Calendar (i.e., Gregorian calendar extends
// backwards to year one) for timestamp formating. // backwards to year one) for timestamp formating.
...@@ -386,11 +387,11 @@ public final class Timestamps { ...@@ -386,11 +387,11 @@ public final class Timestamps {
static String formatNanos(int nanos) { static String formatNanos(int nanos) {
// Determine whether to use 3, 6, or 9 digits for the nano part. // Determine whether to use 3, 6, or 9 digits for the nano part.
if (nanos % NANOS_PER_MILLISECOND == 0) { if (nanos % NANOS_PER_MILLISECOND == 0) {
return String.format("%1$03d", nanos / NANOS_PER_MILLISECOND); return String.format(Locale.ENGLISH, "%1$03d", nanos / NANOS_PER_MILLISECOND);
} else if (nanos % NANOS_PER_MICROSECOND == 0) { } else if (nanos % NANOS_PER_MICROSECOND == 0) {
return String.format("%1$06d", nanos / NANOS_PER_MICROSECOND); return String.format(Locale.ENGLISH, "%1$06d", nanos / NANOS_PER_MICROSECOND);
} else { } else {
return String.format("%1$09d", nanos); return String.format(Locale.ENGLISH, "%1$09d", nanos);
} }
} }
} }
...@@ -65,10 +65,16 @@ import java.io.IOException; ...@@ -65,10 +65,16 @@ import java.io.IOException;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.math.BigInteger; import java.math.BigInteger;
import java.util.HashMap; import java.util.HashMap;
import java.util.Locale;
import java.util.Map; import java.util.Map;
import junit.framework.TestCase; import junit.framework.TestCase;
public class JsonFormatTest extends TestCase { public class JsonFormatTest extends TestCase {
public JsonFormatTest() {
// Test that locale does not affect JsonFormat.
Locale.setDefault(Locale.forLanguageTag("hi-IN"));
}
private void setAllFields(TestAllTypes.Builder builder) { private void setAllFields(TestAllTypes.Builder builder) {
builder.setOptionalInt32(1234); builder.setOptionalInt32(1234);
builder.setOptionalInt64(1234567890123456789L); builder.setOptionalInt64(1234567890123456789L);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment