aboutsummaryrefslogtreecommitdiff
path: root/src/test/java/org/apache/commons/lang3/time/DateFormatUtilsTest.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/test/java/org/apache/commons/lang3/time/DateFormatUtilsTest.java')
-rw-r--r--src/test/java/org/apache/commons/lang3/time/DateFormatUtilsTest.java248
1 files changed, 248 insertions, 0 deletions
diff --git a/src/test/java/org/apache/commons/lang3/time/DateFormatUtilsTest.java b/src/test/java/org/apache/commons/lang3/time/DateFormatUtilsTest.java
new file mode 100644
index 000000000..3e8fd08fd
--- /dev/null
+++ b/src/test/java/org/apache/commons/lang3/time/DateFormatUtilsTest.java
@@ -0,0 +1,248 @@
+/*
+ * 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.commons.lang3.time;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+
+import java.lang.reflect.Constructor;
+import java.lang.reflect.Modifier;
+import java.text.ParseException;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.Locale;
+import java.util.TimeZone;
+
+import org.apache.commons.lang3.AbstractLangTest;
+import org.junit.jupiter.api.Test;
+import org.junitpioneer.jupiter.DefaultLocale;
+import org.junitpioneer.jupiter.DefaultTimeZone;
+
+/**
+ * TestCase for DateFormatUtils.
+ */
+@SuppressWarnings("deprecation") // tests lots of deprecated items
+public class DateFormatUtilsTest extends AbstractLangTest {
+ private void assertFormats(final String expectedValue, final String pattern, final TimeZone timeZone, final Calendar cal) {
+ assertEquals(expectedValue, DateFormatUtils.format(cal.getTime(), pattern, timeZone));
+ assertEquals(expectedValue, DateFormatUtils.format(cal.getTime().getTime(), pattern, timeZone));
+ assertEquals(expectedValue, DateFormatUtils.format(cal, pattern, timeZone));
+ }
+
+ private Calendar createFebruaryTestDate(final TimeZone timeZone) {
+ final Calendar cal = Calendar.getInstance(timeZone);
+ cal.set(2002, Calendar.FEBRUARY, 23, 9, 11, 12);
+ return cal;
+ }
+
+ private Calendar createJuneTestDate(final TimeZone timeZone) {
+ final Calendar cal = Calendar.getInstance(timeZone);
+ cal.set(2003, Calendar.JUNE, 8, 10, 11, 12);
+ return cal;
+ }
+
+ @Test
+ public void testConstructor() {
+ assertNotNull(new DateFormatUtils());
+ final Constructor<?>[] cons = DateFormatUtils.class.getDeclaredConstructors();
+ assertEquals(1, cons.length);
+ assertTrue(Modifier.isPublic(cons[0].getModifiers()));
+ assertTrue(Modifier.isPublic(DateFormatUtils.class.getModifiers()));
+ assertFalse(Modifier.isFinal(DateFormatUtils.class.getModifiers()));
+ }
+
+ @Test
+ public void testDateISO() {
+ testGmtMinus3("2002-02-23", DateFormatUtils.ISO_DATE_FORMAT.getPattern());
+ testGmtMinus3("2002-02-23-03:00", DateFormatUtils.ISO_DATE_TIME_ZONE_FORMAT.getPattern());
+ testUTC("2002-02-23Z", DateFormatUtils.ISO_DATE_TIME_ZONE_FORMAT.getPattern());
+ }
+
+ @Test
+ public void testDateTimeISO() {
+ testGmtMinus3("2002-02-23T09:11:12", DateFormatUtils.ISO_DATETIME_FORMAT.getPattern());
+ testGmtMinus3("2002-02-23T09:11:12-03:00", DateFormatUtils.ISO_DATETIME_TIME_ZONE_FORMAT.getPattern());
+ testUTC("2002-02-23T09:11:12Z", DateFormatUtils.ISO_DATETIME_TIME_ZONE_FORMAT.getPattern());
+ }
+
+ @Test
+ public void testFormat() {
+ final Calendar c = Calendar.getInstance(FastTimeZone.getGmtTimeZone());
+ c.set(2005, Calendar.JANUARY, 1, 12, 0, 0);
+ c.setTimeZone(TimeZone.getDefault());
+ final StringBuilder buffer = new StringBuilder ();
+ final int year = c.get(Calendar.YEAR);
+ final int month = c.get(Calendar.MONTH) + 1;
+ final int day = c.get(Calendar.DAY_OF_MONTH);
+ final int hour = c.get(Calendar.HOUR_OF_DAY);
+ buffer.append (year);
+ buffer.append(month);
+ buffer.append(day);
+ buffer.append(hour);
+ assertEquals(buffer.toString(), DateFormatUtils.format(c.getTime(), "yyyyMdH"));
+
+ assertEquals(buffer.toString(), DateFormatUtils.format(c.getTime().getTime(), "yyyyMdH"));
+
+ assertEquals(buffer.toString(), DateFormatUtils.format(c.getTime(), "yyyyMdH", Locale.US));
+
+ assertEquals(buffer.toString(), DateFormatUtils.format(c.getTime().getTime(), "yyyyMdH", Locale.US));
+ }
+
+ @Test
+ public void testFormatCalendar() {
+ final Calendar c = Calendar.getInstance(FastTimeZone.getGmtTimeZone());
+ c.set(2005, Calendar.JANUARY, 1, 12, 0, 0);
+ c.setTimeZone(TimeZone.getDefault());
+ final StringBuilder buffer = new StringBuilder ();
+ final int year = c.get(Calendar.YEAR);
+ final int month = c.get(Calendar.MONTH) + 1;
+ final int day = c.get(Calendar.DAY_OF_MONTH);
+ final int hour = c.get(Calendar.HOUR_OF_DAY);
+ buffer.append (year);
+ buffer.append(month);
+ buffer.append(day);
+ buffer.append(hour);
+ assertEquals(buffer.toString(), DateFormatUtils.format(c, "yyyyMdH"));
+
+ assertEquals(buffer.toString(), DateFormatUtils.format(c.getTime(), "yyyyMdH"));
+
+ assertEquals(buffer.toString(), DateFormatUtils.format(c, "yyyyMdH", Locale.US));
+
+ assertEquals(buffer.toString(), DateFormatUtils.format(c.getTime(), "yyyyMdH", Locale.US));
+ }
+
+ @Test
+ public void testFormatUTC() {
+ final Calendar c = Calendar.getInstance(FastTimeZone.getGmtTimeZone());
+ c.set(2005, Calendar.JANUARY, 1, 12, 0, 0);
+ assertEquals ("2005-01-01T12:00:00", DateFormatUtils.formatUTC(c.getTime(), DateFormatUtils.ISO_DATETIME_FORMAT.getPattern()));
+
+ assertEquals ("2005-01-01T12:00:00", DateFormatUtils.formatUTC(c.getTime().getTime(), DateFormatUtils.ISO_DATETIME_FORMAT.getPattern()));
+
+ assertEquals ("2005-01-01T12:00:00", DateFormatUtils.formatUTC(c.getTime(), DateFormatUtils.ISO_DATETIME_FORMAT.getPattern(), Locale.US));
+
+ assertEquals ("2005-01-01T12:00:00", DateFormatUtils.formatUTC(c.getTime().getTime(), DateFormatUtils.ISO_DATETIME_FORMAT.getPattern(), Locale.US));
+ }
+
+ private void testGmtMinus3(final String expectedValue, final String pattern) {
+ final TimeZone timeZone = TimeZone.getTimeZone("GMT-3");
+ assertFormats(expectedValue, pattern, timeZone, createFebruaryTestDate(timeZone));
+ }
+
+ @Test
+ public void testLANG1000() throws Exception {
+ final String date = "2013-11-18T12:48:05Z";
+ DateFormatUtils.ISO_DATETIME_TIME_ZONE_FORMAT.parse(date);
+ }
+
+ @Test
+ public void testLANG1462() {
+ final TimeZone timeZone = TimeZone.getTimeZone("GMT-3");
+ final Calendar calendar = createJuneTestDate(timeZone);
+ assertEquals("20030608101112", DateFormatUtils.format(calendar, "yyyyMMddHHmmss"));
+ calendar.setTimeZone(TimeZone.getTimeZone("JST"));
+ assertEquals("20030608221112", DateFormatUtils.format(calendar, "yyyyMMddHHmmss"));
+ }
+
+ @DefaultTimeZone("UTC")
+ @Test
+ public void testLang530() throws ParseException {
+ final Date d = new Date();
+ final String isoDateStr = DateFormatUtils.ISO_DATETIME_TIME_ZONE_FORMAT.format(d);
+ final Date d2 = DateUtils.parseDate(isoDateStr, DateFormatUtils.ISO_DATETIME_TIME_ZONE_FORMAT.getPattern());
+ // the format loses milliseconds so have to reintroduce them
+ assertEquals(d.getTime(), d2.getTime() + d.getTime() % 1000, "Date not equal to itself ISO formatted and parsed");
+ }
+
+ /**
+ * According to LANG-916 (https://issues.apache.org/jira/browse/LANG-916),
+ * the format method did contain a bug: it did not use the TimeZone data.
+ *
+ * This method test that the bug is fixed.
+ */
+ @Test
+ public void testLang916() {
+
+ final Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("Europe/Paris"));
+ cal.clear();
+ cal.set(2009, 9, 16, 8, 42, 16);
+
+ // Long.
+ {
+ final String value = DateFormatUtils.format(cal.getTimeInMillis(), DateFormatUtils.ISO_DATETIME_TIME_ZONE_FORMAT.getPattern(), TimeZone.getTimeZone("Europe/Paris"));
+ assertEquals("2009-10-16T08:42:16+02:00", value, "long");
+ }
+ {
+ final String value = DateFormatUtils.format(cal.getTimeInMillis(), DateFormatUtils.ISO_DATETIME_TIME_ZONE_FORMAT.getPattern(), TimeZone.getTimeZone("Asia/Kolkata"));
+ assertEquals("2009-10-16T12:12:16+05:30", value, "long");
+ }
+ {
+ final String value = DateFormatUtils.format(cal.getTimeInMillis(), DateFormatUtils.ISO_DATETIME_TIME_ZONE_FORMAT.getPattern(), TimeZone.getTimeZone("Europe/London"));
+ assertEquals("2009-10-16T07:42:16+01:00", value, "long");
+ }
+
+ // Calendar.
+ {
+ final String value = DateFormatUtils.format(cal, DateFormatUtils.ISO_DATETIME_TIME_ZONE_FORMAT.getPattern(), TimeZone.getTimeZone("Europe/Paris"));
+ assertEquals("2009-10-16T08:42:16+02:00", value, "calendar");
+ }
+ {
+ final String value = DateFormatUtils.format(cal, DateFormatUtils.ISO_DATETIME_TIME_ZONE_FORMAT.getPattern(), TimeZone.getTimeZone("Asia/Kolkata"));
+ assertEquals("2009-10-16T12:12:16+05:30", value, "calendar");
+ }
+ {
+ final String value = DateFormatUtils.format(cal, DateFormatUtils.ISO_DATETIME_TIME_ZONE_FORMAT.getPattern(), TimeZone.getTimeZone("Europe/London"));
+ assertEquals("2009-10-16T07:42:16+01:00", value, "calendar");
+ }
+ }
+
+ @DefaultLocale(language = "en")
+ @Test
+ public void testSMTP() {
+ TimeZone timeZone = TimeZone.getTimeZone("GMT-3");
+ Calendar june = createJuneTestDate(timeZone);
+
+ assertFormats("Sun, 08 Jun 2003 10:11:12 -0300", DateFormatUtils.SMTP_DATETIME_FORMAT.getPattern(),
+ timeZone, june);
+
+ timeZone = FastTimeZone.getGmtTimeZone();
+ june = createJuneTestDate(timeZone);
+ assertFormats("Sun, 08 Jun 2003 10:11:12 +0000", DateFormatUtils.SMTP_DATETIME_FORMAT.getPattern(),
+ timeZone, june);
+ }
+
+ @Test
+ public void testTimeISO() {
+ testGmtMinus3("T09:11:12", DateFormatUtils.ISO_TIME_FORMAT.getPattern());
+ testGmtMinus3("T09:11:12-03:00", DateFormatUtils.ISO_TIME_TIME_ZONE_FORMAT.getPattern());
+ testUTC("T09:11:12Z", DateFormatUtils.ISO_TIME_TIME_ZONE_FORMAT.getPattern());
+ }
+
+ @Test
+ public void testTimeNoTISO() {
+ testGmtMinus3("09:11:12", DateFormatUtils.ISO_TIME_NO_T_FORMAT.getPattern());
+ testGmtMinus3("09:11:12-03:00", DateFormatUtils.ISO_TIME_NO_T_TIME_ZONE_FORMAT.getPattern());
+ testUTC("09:11:12Z", DateFormatUtils.ISO_TIME_NO_T_TIME_ZONE_FORMAT.getPattern());
+ }
+
+ private void testUTC(final String expectedValue, final String pattern) {
+ final TimeZone timeZone = FastTimeZone.getGmtTimeZone();
+ assertFormats(expectedValue, pattern, timeZone, createFebruaryTestDate(timeZone));
+ }
+}