///////////////////////////////////////////////////////////////////////////// // // Project ProjectForge Community Edition // www.projectforge.org // // Copyright (C) 2001-2014 Kai Reinhard (k.reinhard@micromata.de) // // ProjectForge is dual-licensed. // // This community edition is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License as published // by the Free Software Foundation; version 3 of the License. // // This community edition is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General // Public License for more details. // // You should have received a copy of the GNU General Public License along // with this program; if not, see http://www.gnu.org/licenses/. // ///////////////////////////////////////////////////////////////////////////// package org.projectforge.common; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; import java.text.DateFormat; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; import java.util.Locale; import org.joda.time.DateTimeConstants; import org.junit.Test; import org.projectforge.core.Configuration; import org.projectforge.test.TestBase; public class DateHelperTest extends TestBase { @Test public void testTimeZone() throws ParseException { final DateFormat df = new SimpleDateFormat("yyyy-MM-dd hh:mm"); df.setTimeZone(DateHelper.EUROPE_BERLIN); final Date mezDate = df.parse("2008-03-14 17:25"); final long mezMillis = mezDate.getTime(); df.setTimeZone(DateHelper.UTC); final Date utcDate = df.parse("2008-03-14 16:25"); final long utcMillis = utcDate.getTime(); assertEquals(mezMillis, utcMillis); } @Test public void formatIsoDate() { assertEquals("1970-11-21", DateHelper.formatIsoDate(createDate(1970, Calendar.NOVEMBER, 21, 16, 0, 0, 0))); assertEquals("1970-11-21", DateHelper.formatIsoDate(createDate(1970, Calendar.NOVEMBER, 21, 16, 35, 27, 968))); } @Test public void formatIsoTimestamp() { assertEquals("1970-11-21 17:00:00.000", DateHelper.formatIsoTimestamp(createDate(1970, Calendar.NOVEMBER, 21, 17, 0, 0, 0))); assertEquals("1970-11-21 17:05:07.123", DateHelper.formatIsoTimestamp(createDate(1970, Calendar.NOVEMBER, 21, 17, 5, 7, 123))); } @Test public void getDuration() { final DateHolder dateHolder = new DateHolder(DatePrecision.MINUTE, Locale.GERMAN); dateHolder.setDate(1970, Calendar.NOVEMBER, 21, 4, 50, 0); final Date startTime = dateHolder.getDate(); dateHolder.setDate(1970, Calendar.NOVEMBER, 21, 6, 59, 0); final Date stopTime = dateHolder.getDate(); assertEquals(129, DateHelper.getDuration(startTime, stopTime)); assertEquals(0, DateHelper.getDuration(stopTime, startTime)); assertEquals(0, DateHelper.getDuration(null, stopTime)); assertEquals(0, DateHelper.getDuration(startTime, null)); assertEquals(0, DateHelper.getDuration(null, null)); assertEquals(0, DateHelper.getDuration(startTime, startTime)); } @Test public void formatMonth() { assertEquals("2009-01", DateHelper.formatMonth(2009, 0)); assertEquals("2009-01", DateHelper.formatMonth(2009, Calendar.JANUARY)); assertEquals("2009-03", DateHelper.formatMonth(2009, Calendar.MARCH)); assertEquals("2009-09", DateHelper.formatMonth(2009, Calendar.SEPTEMBER)); assertEquals("2009-10", DateHelper.formatMonth(2009, Calendar.OCTOBER)); assertEquals("2009-12", DateHelper.formatMonth(2009, Calendar.DECEMBER)); } @Test public void dateOfYearBetween() { assertTrue(DateHelper.dateOfYearBetween(1, 3, 1, 3, 1, 3)); // 1/3 is between 1/3 and 1/3 // 1/3 - 1/20 assertTrue(DateHelper.dateOfYearBetween(1, 3, 1, 3, 1, 20)); // 1/3 is between 1/3 and 1/20 assertTrue(DateHelper.dateOfYearBetween(1, 20, 1, 3, 1, 20)); // 1/20 is between 1/3 and 1/20 assertFalse(DateHelper.dateOfYearBetween(1, 2, 1, 3, 1, 20)); // 1/2 isn't between 1/3 and 1/20 assertFalse(DateHelper.dateOfYearBetween(1, 21, 1, 3, 1, 20)); // 1/21 isn't between 1/3 and 1/20 // 1/3 - 2/20 assertTrue(DateHelper.dateOfYearBetween(1, 3, 1, 3, 2, 20)); // 1/3 is between 1/3 and 2/20 assertTrue(DateHelper.dateOfYearBetween(1, 30, 1, 3, 2, 20)); // 1/30 is between 1/3 and 2/20 assertTrue(DateHelper.dateOfYearBetween(2, 20, 1, 3, 2, 20)); // 2/20 is between 1/3 and 2/20 assertFalse(DateHelper.dateOfYearBetween(1, 2, 1, 3, 2, 20)); // 1/2 isn't between 1/3 and 1/20 assertFalse(DateHelper.dateOfYearBetween(2, 21, 1, 3, 2, 20)); // 2/21 isn't between 1/3 and 1/20 // 1/3 - 3/20 assertTrue(DateHelper.dateOfYearBetween(2, 1, 1, 3, 2, 20)); // 2/1 is between 1/3 and 3/20 assertFalse(DateHelper.dateOfYearBetween(1, 2, 1, 3, 2, 20)); // 1/2 isn't between 1/3 and 3/20 assertFalse(DateHelper.dateOfYearBetween(3, 21, 1, 3, 2, 20)); // 3/21 isn't between 1/3 and 3/20 assertFalse(DateHelper.dateOfYearBetween(0, 21, 1, 3, 2, 20)); // 0/21 isn't between 1/3 and 3/20 assertFalse(DateHelper.dateOfYearBetween(4, 21, 1, 3, 2, 20)); // 4/21 isn't between 1/3 and 3/20 // 11/3 - 0/20 assertTrue(DateHelper.dateOfYearBetween(0, 1, 11, 3, 0, 20)); // 0/1 is between 11/3 and 0/20 assertTrue(DateHelper.dateOfYearBetween(11, 3, 11, 3, 0, 20)); // 11/3 is between 11/3 and 0/20 assertTrue(DateHelper.dateOfYearBetween(0, 20, 11, 3, 0, 20)); // 11/3 is between 11/3 and 0/20 assertFalse(DateHelper.dateOfYearBetween(0, 21, 11, 3, 0, 20)); // 0/21 isn't between 11/3 and 0/20 assertFalse(DateHelper.dateOfYearBetween(11, 2, 11, 3, 0, 20)); // 11/21 isn't between 11/3 and 0/20 // 10/3 - 2/20 assertTrue(DateHelper.dateOfYearBetween(0, 1, 10, 3, 2, 20)); // 0/1 is between 10/3 and 2/20 assertTrue(DateHelper.dateOfYearBetween(11, 3, 10, 3, 2, 20)); // 11/3 is between 10/3 and 2/20 assertTrue(DateHelper.dateOfYearBetween(0, 20, 10, 3, 2, 20)); // 11/3 is between 10/3 and 2/20 assertTrue(DateHelper.dateOfYearBetween(0, 21, 10, 3, 2, 20)); // 0/21 is between 10/3 and 2/20 assertTrue(DateHelper.dateOfYearBetween(11, 2, 10, 3, 2, 20)); // 11/21 is between 10/3 and 2/20 assertTrue(DateHelper.dateOfYearBetween(10, 3, 10, 3, 2, 20)); // 10/03 is between 10/3 and 2/20 assertTrue(DateHelper.dateOfYearBetween(2, 20, 10, 3, 2, 20)); // 2/20 is between 10/3 and 2/20 assertFalse(DateHelper.dateOfYearBetween(10, 2, 10, 3, 2, 20)); // 10/2 isn't between 10/3 and 2/20 assertFalse(DateHelper.dateOfYearBetween(2, 21, 10, 3, 2, 20)); // 2/21 isn't between 10/3 and 2/20 assertFalse(DateHelper.dateOfYearBetween(3, 21, 10, 3, 2, 20)); // 3/21 isn't between 10/3 and 2/20 assertFalse(DateHelper.dateOfYearBetween(9, 21, 10, 3, 2, 20)); // 9/21 isn't between 10/3 and 2/20 } @Test public void convertCalendarDayOfWeekToJoda() { assertEquals(DateTimeConstants.MONDAY, DateHelper.convertCalendarDayOfWeekToJoda(Calendar.MONDAY)); assertEquals(DateTimeConstants.TUESDAY, DateHelper.convertCalendarDayOfWeekToJoda(Calendar.TUESDAY)); assertEquals(DateTimeConstants.WEDNESDAY, DateHelper.convertCalendarDayOfWeekToJoda(Calendar.WEDNESDAY)); assertEquals(DateTimeConstants.THURSDAY, DateHelper.convertCalendarDayOfWeekToJoda(Calendar.THURSDAY)); assertEquals(DateTimeConstants.FRIDAY, DateHelper.convertCalendarDayOfWeekToJoda(Calendar.FRIDAY)); assertEquals(DateTimeConstants.SATURDAY, DateHelper.convertCalendarDayOfWeekToJoda(Calendar.SATURDAY)); assertEquals(DateTimeConstants.SUNDAY, DateHelper.convertCalendarDayOfWeekToJoda(Calendar.SUNDAY)); } public static Date createDate(final int year, final int month, final int day, final int hour, final int minute, final int second, final int millisecond) { final Calendar cal = Calendar.getInstance(Configuration.getInstance().getDefaultTimeZone()); cal.set(Calendar.YEAR, year); cal.set(Calendar.MONTH, month); cal.set(Calendar.DAY_OF_MONTH, day); cal.set(Calendar.HOUR_OF_DAY, hour); cal.set(Calendar.MINUTE, minute); cal.set(Calendar.SECOND, second); cal.set(Calendar.MILLISECOND, millisecond); return cal.getTime(); } }