Repository: cassandra Updated Branches: refs/heads/trunk 5062bb6eb -> ae063e806
JSON datetime formatting needs timezone patch by Alex Petrov; reviewed by Stefania Alborghetti for CASSANDRA-11137 Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/ae063e80 Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/ae063e80 Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/ae063e80 Branch: refs/heads/trunk Commit: ae063e806191f8285f1f3bcab068b2c4bfbc257b Parents: 5062bb6 Author: Alex Petrov <oleksandr.pet...@gmail.com> Authored: Mon Apr 18 18:59:04 2016 +0200 Committer: Stefania Alborghetti <stefania.alborghe...@datastax.com> Committed: Thu Apr 21 12:02:47 2016 +0800 ---------------------------------------------------------------------- CHANGES.txt | 1 + .../apache/cassandra/serializers/TimestampSerializer.java | 9 ++++++--- .../apache/cassandra/cql3/validation/entities/JsonTest.java | 6 ++++-- 3 files changed, 11 insertions(+), 5 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cassandra/blob/ae063e80/CHANGES.txt ---------------------------------------------------------------------- diff --git a/CHANGES.txt b/CHANGES.txt index 9f67555..1b94b2d 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,4 +1,5 @@ 3.6 + * JSON datetime formatting needs timezone (CASSANDRA-11137) * Add support to rebuild from specific range (CASSANDRA-10409) * Optimize the overlapping lookup by calculating all the bounds in advance (CASSANDRA-11571) http://git-wip-us.apache.org/repos/asf/cassandra/blob/ae063e80/src/java/org/apache/cassandra/serializers/TimestampSerializer.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/serializers/TimestampSerializer.java b/src/java/org/apache/cassandra/serializers/TimestampSerializer.java index fbd98d1..9bd9a8d 100644 --- a/src/java/org/apache/cassandra/serializers/TimestampSerializer.java +++ b/src/java/org/apache/cassandra/serializers/TimestampSerializer.java @@ -49,11 +49,11 @@ public class TimestampSerializer implements TypeSerializer<Date> "yyyy-MM-dd HH:mm:ssX", "yyyy-MM-dd HH:mm:ssXX", "yyyy-MM-dd HH:mm:ssXXX", - "yyyy-MM-dd HH:mm:ss.SSS", // TO_JSON_FORMAT + "yyyy-MM-dd HH:mm:ss.SSS", "yyyy-MM-dd HH:mm:ss.SSS z", "yyyy-MM-dd HH:mm:ss.SSS zz", "yyyy-MM-dd HH:mm:ss.SSS zzz", - "yyyy-MM-dd HH:mm:ss.SSSX", + "yyyy-MM-dd HH:mm:ss.SSSX", // TO_JSON_FORMAT "yyyy-MM-dd HH:mm:ss.SSSXX", "yyyy-MM-dd HH:mm:ss.SSSXXX", "yyyy-MM-dd'T'HH:mm", @@ -108,11 +108,14 @@ public class TimestampSerializer implements TypeSerializer<Date> } }; + private static final String TO_JSON_FORMAT = dateStringPatterns[19]; private static final ThreadLocal<SimpleDateFormat> FORMATTER_TO_JSON = new ThreadLocal<SimpleDateFormat>() { protected SimpleDateFormat initialValue() { - return new SimpleDateFormat(dateStringPatterns[15]); + SimpleDateFormat sdf = new SimpleDateFormat(TO_JSON_FORMAT); + sdf.setTimeZone(TimeZone.getTimeZone("UTC")); + return sdf; } }; http://git-wip-us.apache.org/repos/asf/cassandra/blob/ae063e80/test/unit/org/apache/cassandra/cql3/validation/entities/JsonTest.java ---------------------------------------------------------------------- diff --git a/test/unit/org/apache/cassandra/cql3/validation/entities/JsonTest.java b/test/unit/org/apache/cassandra/cql3/validation/entities/JsonTest.java index 43d5309..08bb8a7 100644 --- a/test/unit/org/apache/cassandra/cql3/validation/entities/JsonTest.java +++ b/test/unit/org/apache/cassandra/cql3/validation/entities/JsonTest.java @@ -618,8 +618,10 @@ public class JsonTest extends CQLTester assertRows(execute("SELECT k, toJson(timeval) FROM %s WHERE k = ?", 0), row(0, "\"00:00:00.000000123\"")); // ================ timestamp ================ - execute("INSERT INTO %s (k, timestampval) VALUES (?, ?)", 0, new SimpleDateFormat("y-M-d").parse("2014-01-01")); - assertRows(execute("SELECT k, toJson(timestampval) FROM %s WHERE k = ?", 0), row(0, "\"2014-01-01 00:00:00.000\"")); + SimpleDateFormat sdf = new SimpleDateFormat("y-M-d"); + sdf.setTimeZone(TimeZone.getTimeZone("UDT")); + execute("INSERT INTO %s (k, timestampval) VALUES (?, ?)", 0, sdf.parse("2014-01-01")); + assertRows(execute("SELECT k, toJson(timestampval) FROM %s WHERE k = ?", 0), row(0, "\"2014-01-01 00:00:00.000Z\"")); // ================ timeuuid ================ execute("INSERT INTO %s (k, timeuuidval) VALUES (?, ?)", 0, UUID.fromString("6bddc89a-5644-11e4-97fc-56847afe9799"));