You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wicket.apache.org by mg...@apache.org on 2016/07/11 22:19:14 UTC
wicket git commit: WICKET-6200 Add converters for java.time classes
Repository: wicket
Updated Branches:
refs/heads/WICKET-6200-converters-for-java-time [created] 8eb01465a
WICKET-6200 Add converters for java.time classes
TODO: debug why Offset and Zoned do not work properly
Project: http://git-wip-us.apache.org/repos/asf/wicket/repo
Commit: http://git-wip-us.apache.org/repos/asf/wicket/commit/8eb01465
Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/8eb01465
Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/8eb01465
Branch: refs/heads/WICKET-6200-converters-for-java-time
Commit: 8eb01465a556833700cf8514701c53e12f297263
Parents: 0f2d2e6
Author: Martin Tzvetanov Grigorov <mg...@apache.org>
Authored: Tue Jul 12 00:18:42 2016 +0200
Committer: Martin Tzvetanov Grigorov <mg...@apache.org>
Committed: Tue Jul 12 00:18:42 2016 +0200
----------------------------------------------------------------------
.../org/apache/wicket/ConverterLocator.java | 14 +++-
.../converter/AbstractJavaTimeConverter.java | 88 ++++++++++++++++++++
.../convert/converter/CalendarConverter.java | 8 --
.../convert/converter/LocalDateConverter.java | 49 +++++++++++
.../converter/LocalDateTimeConverter.java | 49 +++++++++++
.../converter/OffsetDateTimeConverter.java | 49 +++++++++++
.../converter/ZonedDateTimeConverter.java | 49 +++++++++++
.../converter/LocalDateConverterTest.java | 46 ++++++++++
.../converter/LocalDateTimeConverterTest.java | 46 ++++++++++
.../converter/OffsetDateTimeConverterTest.java | 49 +++++++++++
.../converter/ZonedDateTimeConverterTest.java | 49 +++++++++++
11 files changed, 487 insertions(+), 9 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/wicket/blob/8eb01465/wicket-core/src/main/java/org/apache/wicket/ConverterLocator.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/ConverterLocator.java b/wicket-core/src/main/java/org/apache/wicket/ConverterLocator.java
index ea03de9..9e6086f 100644
--- a/wicket-core/src/main/java/org/apache/wicket/ConverterLocator.java
+++ b/wicket-core/src/main/java/org/apache/wicket/ConverterLocator.java
@@ -19,6 +19,10 @@ package org.apache.wicket;
import java.lang.ref.WeakReference;
import java.math.BigDecimal;
import java.math.BigInteger;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.time.OffsetDateTime;
+import java.time.ZonedDateTime;
import java.util.Calendar;
import java.util.Date;
import java.util.HashMap;
@@ -37,11 +41,15 @@ import org.apache.wicket.util.convert.converter.DateConverter;
import org.apache.wicket.util.convert.converter.DoubleConverter;
import org.apache.wicket.util.convert.converter.FloatConverter;
import org.apache.wicket.util.convert.converter.IntegerConverter;
+import org.apache.wicket.util.convert.converter.LocalDateConverter;
+import org.apache.wicket.util.convert.converter.LocalDateTimeConverter;
import org.apache.wicket.util.convert.converter.LongConverter;
+import org.apache.wicket.util.convert.converter.OffsetDateTimeConverter;
import org.apache.wicket.util.convert.converter.ShortConverter;
import org.apache.wicket.util.convert.converter.SqlDateConverter;
import org.apache.wicket.util.convert.converter.SqlTimeConverter;
import org.apache.wicket.util.convert.converter.SqlTimestampConverter;
+import org.apache.wicket.util.convert.converter.ZonedDateTimeConverter;
import org.apache.wicket.util.lang.Args;
import org.apache.wicket.util.lang.Objects;
@@ -145,7 +153,7 @@ public class ConverterLocator implements IConverterLocator
private static final long serialVersionUID = 1L;
/** Maps Classes to ITypeConverters. */
- private final Map<String, IConverter<?>> classToConverter = new HashMap<String, IConverter<?>>();
+ private final Map<String, IConverter<?>> classToConverter = new HashMap<>();
/**
* Constructor
@@ -175,6 +183,10 @@ public class ConverterLocator implements IConverterLocator
set(java.sql.Time.class, new SqlTimeConverter());
set(java.sql.Timestamp.class, new SqlTimestampConverter());
set(Calendar.class, new CalendarConverter());
+ set(LocalDate.class, new LocalDateConverter());
+ set(LocalDateTime.class, new LocalDateTimeConverter());
+ set(OffsetDateTime.class, new OffsetDateTimeConverter());
+ set(ZonedDateTime.class, new ZonedDateTimeConverter());
}
/**
http://git-wip-us.apache.org/repos/asf/wicket/blob/8eb01465/wicket-util/src/main/java/org/apache/wicket/util/convert/converter/AbstractJavaTimeConverter.java
----------------------------------------------------------------------
diff --git a/wicket-util/src/main/java/org/apache/wicket/util/convert/converter/AbstractJavaTimeConverter.java b/wicket-util/src/main/java/org/apache/wicket/util/convert/converter/AbstractJavaTimeConverter.java
new file mode 100644
index 0000000..d870b54
--- /dev/null
+++ b/wicket-util/src/main/java/org/apache/wicket/util/convert/converter/AbstractJavaTimeConverter.java
@@ -0,0 +1,88 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.wicket.util.convert.converter;
+
+import java.time.format.DateTimeFormatter;
+import java.time.temporal.Temporal;
+import java.time.temporal.TemporalAccessor;
+import java.util.Locale;
+
+import org.apache.wicket.util.string.Strings;
+
+/**
+ * A base class for all java.time.** related converters
+ *
+ * @param <T>
+ * the type of the Temporal that is supported by this converter
+ */
+public abstract class AbstractJavaTimeConverter<T extends Temporal> extends AbstractConverter<T>
+{
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * Creates a new instance of D out of the passed date(time) as long
+ * @param temporalAccessor
+ * the date(time) in millis since Epoch
+ * @return a new instance of the specific type D
+ */
+ protected abstract T createTemporal(TemporalAccessor temporalAccessor);
+
+ @Override
+ public T convertToObject(final String value, Locale locale)
+ {
+ if (Strings.isEmpty(value))
+ {
+ return null;
+ }
+
+ DateTimeFormatter dateTimeFormatter = getDateTimeFormatter(locale);
+ TemporalAccessor temporalAccessor = dateTimeFormatter.parse(value);
+ return createTemporal(temporalAccessor);
+ }
+
+ @Override
+ public String convertToString(final T value, final Locale locale)
+ {
+ if (value == null)
+ {
+ return null;
+ }
+
+ final DateTimeFormatter dateTimeFormatter = getDateTimeFormatter(locale);
+ if (dateTimeFormatter != null)
+ {
+ return dateTimeFormatter.format(value);
+ }
+ return value.toString();
+ }
+
+ /**
+ * @param locale
+ * @return Returns the date time format.
+ */
+ public DateTimeFormatter getDateTimeFormatter(Locale locale)
+ {
+ if (locale == null)
+ {
+ locale = Locale.getDefault();
+ }
+
+ return getDateTimeFormatter().withLocale(locale);
+ }
+
+ protected abstract DateTimeFormatter getDateTimeFormatter();
+}
http://git-wip-us.apache.org/repos/asf/wicket/blob/8eb01465/wicket-util/src/main/java/org/apache/wicket/util/convert/converter/CalendarConverter.java
----------------------------------------------------------------------
diff --git a/wicket-util/src/main/java/org/apache/wicket/util/convert/converter/CalendarConverter.java b/wicket-util/src/main/java/org/apache/wicket/util/convert/converter/CalendarConverter.java
index 162acf7..4d371e6 100644
--- a/wicket-util/src/main/java/org/apache/wicket/util/convert/converter/CalendarConverter.java
+++ b/wicket-util/src/main/java/org/apache/wicket/util/convert/converter/CalendarConverter.java
@@ -53,10 +53,6 @@ public class CalendarConverter implements IConverter<Calendar>
this.dateConverter = dateConverter;
}
- /**
- * @see org.apache.wicket.util.convert.IConverter#convertToObject(java.lang.String,
- * java.util.Locale)
- */
@Override
public Calendar convertToObject(final String value, final Locale locale)
{
@@ -71,10 +67,6 @@ public class CalendarConverter implements IConverter<Calendar>
return calendar;
}
- /**
- * @see org.apache.wicket.util.convert.IConverter#convertToString(java.lang.Object,
- * java.util.Locale)
- */
@Override
public String convertToString(final Calendar value, final Locale locale)
{
http://git-wip-us.apache.org/repos/asf/wicket/blob/8eb01465/wicket-util/src/main/java/org/apache/wicket/util/convert/converter/LocalDateConverter.java
----------------------------------------------------------------------
diff --git a/wicket-util/src/main/java/org/apache/wicket/util/convert/converter/LocalDateConverter.java b/wicket-util/src/main/java/org/apache/wicket/util/convert/converter/LocalDateConverter.java
new file mode 100644
index 0000000..18952f7
--- /dev/null
+++ b/wicket-util/src/main/java/org/apache/wicket/util/convert/converter/LocalDateConverter.java
@@ -0,0 +1,49 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.wicket.util.convert.converter;
+
+import java.time.LocalDate;
+import java.time.format.DateTimeFormatter;
+import java.time.format.FormatStyle;
+import java.time.temporal.TemporalAccessor;
+
+/**
+ * Converts from Object to {@link LocalDate}.
+ */
+public class LocalDateConverter extends AbstractJavaTimeConverter<LocalDate>
+{
+ private static final long serialVersionUID = 1L;
+
+ private static final DateTimeFormatter SHORT_DATE_TIME_FORMATTER = DateTimeFormatter.ofLocalizedDate(FormatStyle.SHORT);
+
+ @Override
+ protected Class<LocalDate> getTargetType()
+ {
+ return LocalDate.class;
+ }
+
+ @Override
+ protected LocalDate createTemporal(TemporalAccessor temporalAccessor)
+ {
+ return LocalDate.from(temporalAccessor);
+ }
+
+ @Override
+ protected DateTimeFormatter getDateTimeFormatter() {
+ return SHORT_DATE_TIME_FORMATTER;
+ }
+}
http://git-wip-us.apache.org/repos/asf/wicket/blob/8eb01465/wicket-util/src/main/java/org/apache/wicket/util/convert/converter/LocalDateTimeConverter.java
----------------------------------------------------------------------
diff --git a/wicket-util/src/main/java/org/apache/wicket/util/convert/converter/LocalDateTimeConverter.java b/wicket-util/src/main/java/org/apache/wicket/util/convert/converter/LocalDateTimeConverter.java
new file mode 100644
index 0000000..e32211a
--- /dev/null
+++ b/wicket-util/src/main/java/org/apache/wicket/util/convert/converter/LocalDateTimeConverter.java
@@ -0,0 +1,49 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.wicket.util.convert.converter;
+
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
+import java.time.format.FormatStyle;
+import java.time.temporal.TemporalAccessor;
+
+/**
+ * Converts from Object to {@link java.time.LocalDateTime}.
+ */
+public class LocalDateTimeConverter extends AbstractJavaTimeConverter<LocalDateTime>
+{
+ private static final long serialVersionUID = 1L;
+
+ private static final DateTimeFormatter DATE_TIME_FORMATTER = DateTimeFormatter.ofLocalizedDateTime(FormatStyle.MEDIUM);
+
+ @Override
+ protected Class<LocalDateTime> getTargetType()
+ {
+ return LocalDateTime.class;
+ }
+
+ @Override
+ protected LocalDateTime createTemporal(TemporalAccessor temporalAccessor)
+ {
+ return LocalDateTime.from(temporalAccessor);
+ }
+
+ @Override
+ protected DateTimeFormatter getDateTimeFormatter() {
+ return DATE_TIME_FORMATTER;
+ }
+}
http://git-wip-us.apache.org/repos/asf/wicket/blob/8eb01465/wicket-util/src/main/java/org/apache/wicket/util/convert/converter/OffsetDateTimeConverter.java
----------------------------------------------------------------------
diff --git a/wicket-util/src/main/java/org/apache/wicket/util/convert/converter/OffsetDateTimeConverter.java b/wicket-util/src/main/java/org/apache/wicket/util/convert/converter/OffsetDateTimeConverter.java
new file mode 100644
index 0000000..88d8216
--- /dev/null
+++ b/wicket-util/src/main/java/org/apache/wicket/util/convert/converter/OffsetDateTimeConverter.java
@@ -0,0 +1,49 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.wicket.util.convert.converter;
+
+import java.time.OffsetDateTime;
+import java.time.ZoneOffset;
+import java.time.format.DateTimeFormatter;
+import java.time.temporal.TemporalAccessor;
+
+/**
+ * Converts from Object to {@link OffsetDateTime}.
+ */
+public class OffsetDateTimeConverter extends AbstractJavaTimeConverter<OffsetDateTime>
+{
+ private static final long serialVersionUID = 1L;
+
+ private static final DateTimeFormatter DATE_TIME_FORMATTER = DateTimeFormatter.ISO_OFFSET_DATE_TIME;
+
+ @Override
+ protected Class<OffsetDateTime> getTargetType()
+ {
+ return OffsetDateTime.class;
+ }
+
+ @Override
+ protected OffsetDateTime createTemporal(TemporalAccessor temporalAccessor)
+ {
+ return OffsetDateTime.from(temporalAccessor);
+ }
+
+ @Override
+ protected DateTimeFormatter getDateTimeFormatter() {
+ return DATE_TIME_FORMATTER.withZone(ZoneOffset.UTC);
+ }
+}
http://git-wip-us.apache.org/repos/asf/wicket/blob/8eb01465/wicket-util/src/main/java/org/apache/wicket/util/convert/converter/ZonedDateTimeConverter.java
----------------------------------------------------------------------
diff --git a/wicket-util/src/main/java/org/apache/wicket/util/convert/converter/ZonedDateTimeConverter.java b/wicket-util/src/main/java/org/apache/wicket/util/convert/converter/ZonedDateTimeConverter.java
new file mode 100644
index 0000000..b9d372f
--- /dev/null
+++ b/wicket-util/src/main/java/org/apache/wicket/util/convert/converter/ZonedDateTimeConverter.java
@@ -0,0 +1,49 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.wicket.util.convert.converter;
+
+import java.time.ZoneOffset;
+import java.time.ZonedDateTime;
+import java.time.format.DateTimeFormatter;
+import java.time.temporal.TemporalAccessor;
+
+/**
+ * Converts from Object to {@link ZonedDateTime}.
+ */
+public class ZonedDateTimeConverter extends AbstractJavaTimeConverter<ZonedDateTime>
+{
+ private static final long serialVersionUID = 1L;
+
+ private static final DateTimeFormatter DATE_TIME_FORMATTER = DateTimeFormatter.ISO_ZONED_DATE_TIME;
+
+ @Override
+ protected Class<ZonedDateTime> getTargetType()
+ {
+ return ZonedDateTime.class;
+ }
+
+ @Override
+ protected ZonedDateTime createTemporal(TemporalAccessor temporalAccessor)
+ {
+ return ZonedDateTime.from(temporalAccessor);
+ }
+
+ @Override
+ protected DateTimeFormatter getDateTimeFormatter() {
+ return DATE_TIME_FORMATTER.withZone(ZoneOffset.UTC);
+ }
+}
http://git-wip-us.apache.org/repos/asf/wicket/blob/8eb01465/wicket-util/src/test/java/org/apache/wicket/util/convert/converter/LocalDateConverterTest.java
----------------------------------------------------------------------
diff --git a/wicket-util/src/test/java/org/apache/wicket/util/convert/converter/LocalDateConverterTest.java b/wicket-util/src/test/java/org/apache/wicket/util/convert/converter/LocalDateConverterTest.java
new file mode 100644
index 0000000..5fceaf6
--- /dev/null
+++ b/wicket-util/src/test/java/org/apache/wicket/util/convert/converter/LocalDateConverterTest.java
@@ -0,0 +1,46 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.wicket.util.convert.converter;
+
+import static org.hamcrest.Matchers.equalTo;
+import static org.hamcrest.Matchers.is;
+
+import java.time.LocalDate;
+import java.util.Locale;
+
+import org.junit.Assert;
+import org.junit.Test;
+
+/**
+ * Tests for {@link LocalDateConverter}
+ */
+public class LocalDateConverterTest extends Assert
+{
+ @Test
+ public void convertToString() {
+ LocalDateConverter converter = new LocalDateConverter();
+ String date = converter.convertToString(LocalDate.of(2016, 7, 11), Locale.ENGLISH);
+ assertThat(date, is(equalTo("7/11/16")));
+ }
+
+ @Test
+ public void convertToObject() {
+ LocalDateConverter converter = new LocalDateConverter();
+ LocalDate date = converter.convertToObject("7/11/16", Locale.ENGLISH);
+ assertThat(date, is(equalTo(LocalDate.of(2016, 7, 11))));
+ }
+}
http://git-wip-us.apache.org/repos/asf/wicket/blob/8eb01465/wicket-util/src/test/java/org/apache/wicket/util/convert/converter/LocalDateTimeConverterTest.java
----------------------------------------------------------------------
diff --git a/wicket-util/src/test/java/org/apache/wicket/util/convert/converter/LocalDateTimeConverterTest.java b/wicket-util/src/test/java/org/apache/wicket/util/convert/converter/LocalDateTimeConverterTest.java
new file mode 100644
index 0000000..05a037e
--- /dev/null
+++ b/wicket-util/src/test/java/org/apache/wicket/util/convert/converter/LocalDateTimeConverterTest.java
@@ -0,0 +1,46 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.wicket.util.convert.converter;
+
+import static org.hamcrest.Matchers.equalTo;
+import static org.hamcrest.Matchers.is;
+
+import java.time.LocalDateTime;
+import java.util.Locale;
+
+import org.junit.Assert;
+import org.junit.Test;
+
+/**
+ * Tests for {@link LocalDateTimeConverter}
+ */
+public class LocalDateTimeConverterTest extends Assert
+{
+ @Test
+ public void convertToString() {
+ LocalDateTimeConverter converter = new LocalDateTimeConverter();
+ String date = converter.convertToString(LocalDateTime.of(2016, 7, 11, 1, 2, 3), Locale.ENGLISH);
+ assertThat(date, is(equalTo("Jul 11, 2016 1:02:03 AM")));
+ }
+
+ @Test
+ public void convertToObject() {
+ LocalDateTimeConverter converter = new LocalDateTimeConverter();
+ LocalDateTime date = converter.convertToObject("Jul 11, 2016 1:02:03 AM", Locale.ENGLISH);
+ assertThat(date, is(equalTo(LocalDateTime.of(2016, 7, 11, 1, 2, 3))));
+ }
+}
http://git-wip-us.apache.org/repos/asf/wicket/blob/8eb01465/wicket-util/src/test/java/org/apache/wicket/util/convert/converter/OffsetDateTimeConverterTest.java
----------------------------------------------------------------------
diff --git a/wicket-util/src/test/java/org/apache/wicket/util/convert/converter/OffsetDateTimeConverterTest.java b/wicket-util/src/test/java/org/apache/wicket/util/convert/converter/OffsetDateTimeConverterTest.java
new file mode 100644
index 0000000..a332579
--- /dev/null
+++ b/wicket-util/src/test/java/org/apache/wicket/util/convert/converter/OffsetDateTimeConverterTest.java
@@ -0,0 +1,49 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.wicket.util.convert.converter;
+
+import static org.hamcrest.Matchers.equalTo;
+import static org.hamcrest.Matchers.is;
+
+import java.time.OffsetDateTime;
+import java.time.ZoneOffset;
+import java.util.Locale;
+
+import org.junit.Assert;
+import org.junit.Test;
+
+/**
+ * Tests for {@link OffsetDateTimeConverter}
+ */
+public class OffsetDateTimeConverterTest extends Assert
+{
+ @Test
+ public void convertToString() {
+ OffsetDateTimeConverter converter = new OffsetDateTimeConverter();
+ OffsetDateTime offsetDateTime = OffsetDateTime.of(2016, 7, 11, 1, 2, 3, 0, ZoneOffset.ofHours(2));
+ String dateTime = converter.convertToString(offsetDateTime, Locale.ENGLISH);
+ assertThat(dateTime, is(equalTo("2016-07-10T23:02:03Z")));
+ }
+
+ @Test
+ public void convertToObject() {
+ OffsetDateTimeConverter converter = new OffsetDateTimeConverter();
+ OffsetDateTime dateTime = converter.convertToObject("2016-07-10T23:02:03+02:00", Locale.ENGLISH);
+ OffsetDateTime offsetDateTime = OffsetDateTime.of(2016, 7, 11, 1, 2, 3, 0, ZoneOffset.ofHours(2));
+ assertThat(dateTime, is(equalTo(offsetDateTime)));
+ }
+}
http://git-wip-us.apache.org/repos/asf/wicket/blob/8eb01465/wicket-util/src/test/java/org/apache/wicket/util/convert/converter/ZonedDateTimeConverterTest.java
----------------------------------------------------------------------
diff --git a/wicket-util/src/test/java/org/apache/wicket/util/convert/converter/ZonedDateTimeConverterTest.java b/wicket-util/src/test/java/org/apache/wicket/util/convert/converter/ZonedDateTimeConverterTest.java
new file mode 100644
index 0000000..72ac395
--- /dev/null
+++ b/wicket-util/src/test/java/org/apache/wicket/util/convert/converter/ZonedDateTimeConverterTest.java
@@ -0,0 +1,49 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.wicket.util.convert.converter;
+
+import static org.hamcrest.Matchers.equalTo;
+import static org.hamcrest.Matchers.is;
+
+import java.time.ZoneOffset;
+import java.time.ZonedDateTime;
+import java.util.Locale;
+
+import org.junit.Assert;
+import org.junit.Test;
+
+/**
+ * Tests for {@link ZonedDateTimeConverter}
+ */
+public class ZonedDateTimeConverterTest extends Assert
+{
+ @Test
+ public void convertToString() {
+ ZonedDateTimeConverter converter = new ZonedDateTimeConverter();
+ ZonedDateTime zonedDateTime = ZonedDateTime.of(2016, 7, 11, 1, 2, 3, 0, ZoneOffset.ofHours(2));
+ String dateTime = converter.convertToString(zonedDateTime, Locale.ENGLISH);
+ assertThat(dateTime, is(equalTo("2016-07-10T23:02:03Z")));
+ }
+
+ @Test
+ public void convertToObject() {
+ ZonedDateTimeConverter converter = new ZonedDateTimeConverter();
+ ZonedDateTime dateTime = converter.convertToObject("2016-07-10T23:02:03Z", Locale.ENGLISH);
+ ZonedDateTime offsetDateTime = ZonedDateTime.of(2016, 7, 11, 1, 2, 3, 0, ZoneOffset.ofHours(2));
+ assertThat(dateTime, is(equalTo(offsetDateTime)));
+ }
+}