diff --git a/org.springframework.context/.classpath b/org.springframework.context/.classpath
index 33ef53a0bc0..3dfd470a92d 100644
--- a/org.springframework.context/.classpath
+++ b/org.springframework.context/.classpath
@@ -36,5 +36,6 @@
+
diff --git a/org.springframework.context/ivy.xml b/org.springframework.context/ivy.xml
index 2d5a59eaa06..062ba96d1da 100644
--- a/org.springframework.context/ivy.xml
+++ b/org.springframework.context/ivy.xml
@@ -46,6 +46,7 @@
+
diff --git a/org.springframework.context/src/main/java/org/springframework/ui/format/jodatime/DateTimeFormatter.java b/org.springframework.context/src/main/java/org/springframework/ui/format/jodatime/DateTimeFormatter.java
new file mode 100644
index 00000000000..6a22b855e8f
--- /dev/null
+++ b/org.springframework.context/src/main/java/org/springframework/ui/format/jodatime/DateTimeFormatter.java
@@ -0,0 +1,56 @@
+/*
+ * Copyright 2002-2009 the original author or authors.
+ *
+ * Licensed 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.springframework.ui.format.jodatime;
+
+import java.text.ParseException;
+import java.util.Locale;
+
+import org.joda.time.DateTime;
+import org.joda.time.format.DateTimeFormat;
+import org.springframework.ui.format.Formatter;
+
+/**
+ * {@link Formatter} implementation to handle JodaTime {@link DateTime} instances.
+ * @author Oliver Gierke
+ */
+public class DateTimeFormatter implements Formatter {
+
+ private org.joda.time.format.DateTimeFormatter formatter;
+
+ /**
+ * Creates a new {@link DateTimeFormatter} for the given JodaTime formatting pattern.
+ * @param pattern
+ * @see DateTimeFormat
+ */
+ public DateTimeFormatter(String pattern) {
+ this.formatter = DateTimeFormat.forPattern(pattern);
+ }
+
+ /**
+ * Creates a new {@link DateTimeFormatter} for the given JodaTime formatter.
+ */
+ public DateTimeFormatter(org.joda.time.format.DateTimeFormatter formatter) {
+ this.formatter = formatter;
+ }
+
+ public String format(DateTime object, Locale locale) {
+ return null == object ? "" : object.toString(formatter);
+ }
+
+ public DateTime parse(String formatted, Locale locale) throws ParseException {
+ return formatter.withLocale(locale).parseDateTime(formatted);
+ }
+}
diff --git a/org.springframework.context/src/test/java/org/springframework/ui/format/jodatime/DateTimeFormatterTests.java b/org.springframework.context/src/test/java/org/springframework/ui/format/jodatime/DateTimeFormatterTests.java
new file mode 100644
index 00000000000..0973887cf4d
--- /dev/null
+++ b/org.springframework.context/src/test/java/org/springframework/ui/format/jodatime/DateTimeFormatterTests.java
@@ -0,0 +1,47 @@
+/*
+ * Copyright 2002-2009 the original author or authors.
+ *
+ * Licensed 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.springframework.ui.format.jodatime;
+
+import static org.junit.Assert.assertEquals;
+
+import java.text.ParseException;
+import java.util.Locale;
+
+import org.joda.time.DateTime;
+import org.joda.time.format.DateTimeFormat;
+import org.junit.Test;
+
+/**
+ * @author Keith Donald
+ */
+public class DateTimeFormatterTests {
+
+ private DateTimeFormatter formatter = new DateTimeFormatter("yyyy-MM-dd");
+
+ @Test
+ public void formatValue() {
+ DateTime dateTime = DateTimeFormat.forPattern("yyyy-MM-dd").parseDateTime("2009-06-01");
+ assertEquals("2009-06-01", formatter.format(dateTime, Locale.US));
+ }
+
+ @Test
+ public void parseValue() throws ParseException {
+ DateTime dateTime = DateTimeFormat.forPattern("yyyy-MM-dd").parseDateTime("2009-06-01");
+ assertEquals(dateTime, formatter.parse("2009-06-01", Locale.US));
+ }
+
+}
diff --git a/org.springframework.context/template.mf b/org.springframework.context/template.mf
index c51781e522b..42e04d527a3 100644
--- a/org.springframework.context/template.mf
+++ b/org.springframework.context/template.mf
@@ -29,6 +29,7 @@ Import-Template:
org.apache.commons.logging.*;version="[1.1.1, 2.0.0)",
org.aspectj.weaver.*;version="[1.5.4, 2.0.0)";resolution:=optional,
org.codehaus.groovy.*;version="[1.5.0, 2.0.0)";resolution:=optional,
+ org.joda.*;version="[1.6.0, 2.0.0)";resolution:=optional,
org.jruby.*;version="[1.1.0, 2.0.0)";resolution:=optional,
org.omg.CORBA.*;version="0";resolution:=optional,
org.springframework.aop.*;version="[3.0.0, 3.0.1)";resolution:=optional,
diff --git a/spring-framework-reference/src/validation.xml b/spring-framework-reference/src/validation.xml
index 703625eb5e1..4858d2025f8 100644
--- a/spring-framework-reference/src/validation.xml
+++ b/spring-framework-reference/src/validation.xml
@@ -962,6 +962,7 @@ public interface Formatter {
Several Formatter implementations are provided in subpackages of ui.format as a convenience.
The date package provides a DateFormatter to format java.util.Date objects with a java.text.DateFormat.
The number package provides a DecimalFormatter, IntegerFormatter, CurrencyFormatter, and PercentFormatter to format java.lang.Number objects using a java.text.NumberFormat.
+ The jodatime package provides a DateTimeFormatter to format Joda DateTime objects, a popular alternative to java.util.Date/Calendar.
Consider DateFormatter as an example Formatter implementation:
@@ -1000,7 +1001,6 @@ public final class DateFormatter implements Formatter {
}]]>
The Spring team welcomes community-driven Formatter contributions; see http://jira.springframework.org to contribute.
- In particular, the team hopes to integrate support for Joda Time and Money Formatters in the future.