package org.rr.commons.utils;
import java.util.Calendar;
import java.util.Date;
import junit.framework.TestCase;
public class DateConversionUtilsTest extends TestCase {
//http://en.wikipedia.org/wiki/Date_format_by_country
//http://en.wikipedia.org/wiki/ISO_8601_usage
//http://en.wikipedia.org/wiki/DIN_5008
public void testToDate() {
assertEquals(DateConversionUtils.detectFromat("1.11.2011"), DateConversionUtils.DATE_FORMATS.DIN_5008);
assertEquals(DateConversionUtils.detectFromat("11-11-1"), DateConversionUtils.DATE_FORMATS.ISO_8601_DATE);
assertEquals(DateConversionUtils.detectFromat("11/1/2011"), DateConversionUtils.DATE_FORMATS.US_ANSI);
//German old DIN
assertTrue(DateConversionUtils.toDate("23.1.11").toString().equals(getDate(23, 01, 2011).toString()));
assertTrue(DateConversionUtils.toDate("23.1.2011").toString().equals(getDate(23, 01, 2011).toString()));
//ISO 8601
assertTrue(DateConversionUtils.toDate("2003-W14-2").toString().equals(getDate(02, 01, 2003).toString()));
assertTrue(DateConversionUtils.toDate("11-1-23").toString().equals(getDate(23, 01, 2011).toString()));
assertTrue(DateConversionUtils.toDate("2011-1-23").toString().equals(getDate(23, 01, 2011).toString()));
//us
assertTrue(DateConversionUtils.toDate("1/23/11").toString().equals(getDate(23, 01, 2011).toString()));
assertTrue(DateConversionUtils.toDate("1/23/2011").toString().equals(getDate(23, 01, 2011).toString()));
assertTrue(DateConversionUtils.toDate("2010/11/28").toString().equals(getDate(28, 11, 2010).toString()));
//ISO_8601_DATE_TIME
assertTrue(DateConversionUtils.toDateTime("2011-05-07 14:39Z").toString().equals(getDate(07, 05, 2011, 14, 39, 00).toString()));
assertTrue(DateConversionUtils.toDateTime("2011-05-07T14:39Z").toString().equals(getDate(07, 05, 2011, 14, 39, 00).toString()));
//ISO 8601 Ordinal
assertTrue(DateConversionUtils.toDateTime("2011-127").toString().equals(getDate(7, 5, 2011).toString()));
assertEquals(DateConversionUtils.toString(DateConversionUtils.toDateTime("2011-127"), DateConversionUtils.DATE_FORMATS.ISO_8601_ORDINAL),"2011-127");
//Java
assertTrue(DateConversionUtils.toDate("Sun Jan 23 00:00:00 CET 2011").toString().equals(getDate(23, 01, 2011).toString()));
assertTrue(DateConversionUtils.toDate("Thu Oct 23 00:00:00 CEST 2008").toString().equals(getDate(23, 10, 2008).toString()));
//W3C
//2008-03-08T19:21:00.000Z
assertTrue(DateConversionUtils.toDate("2008-03-08T19:21:00.000Z").toString().equals(getDate(8, 3, 2008).toString()));
assertTrue(DateConversionUtils.toDateTime("2008-03-08T19:21:00.000Z").toString().equals(getDate(8, 3, 2008, 20, 21, 0).toString()));
assertTrue(DateConversionUtils.toDate("2008-03-08T19:21:00.000Z").toString().equals(getDate(8, 3, 2008).toString()));
assertTrue(DateConversionUtils.toDate("2010-10-13T12:58:49.281000+00:00").toString().equals(getDate(13, 10, 2010).toString()));
assertTrue(DateConversionUtils.toDateTime("2010-11-27T23:00:11+00:00").toString().equals(getDate(28, 11, 2010, 0, 0, 11).toString()));
assertTrue(DateConversionUtils.toDate("2010-11-27T23:00+00:00").toString().equals(getDate(28, 11, 2010, 0, 0, 0).toString()));
assertTrue(DateConversionUtils.toDate("2010-11").toString().equals(getDate(1, 11, 2010).toString()));
assertTrue(DateConversionUtils.toDate("2009-08-04T00:00:00").toString().equals(getDate(4, 8, 2009).toString()));
//W3C stolen T
assertTrue(DateConversionUtils.toDate("2010-09-22 11:15:52.216000+02:00").toString().equals(getDate(22, 9, 2010).toString()));
assertTrue(DateConversionUtils.toDateTime("2010-11-22 11:15:52+02:00").toString().equals(getDate(22, 11, 2010, 10, 15, 52).toString()));
assertTrue(DateConversionUtils.toDate("2010-09").toString().equals(getDate(1, 9, 2010).toString()));
assertTrue(DateConversionUtils.toDate("2011").toString().equals(getDate(1, 1, 2011).toString()));
//RFC 822
assertTrue(DateConversionUtils.toDateTime("Wed, 02 Nov 2002 15:00:00 +0200").toString().equals(getDate(2, 11, 2002, 14, 0, 0).toString()));
assertTrue(DateConversionUtils.toDateTime("Wed, 02 Nov 2002 15:00 +0200").toString().equals(getDate(2, 11, 2002, 14, 0, 0).toString()));
assertTrue(DateConversionUtils.toDateTime("04 Nov 2001 12:08:56 -0700").toString().equals(getDate(4, 11, 2001, 20, 8, 56).toString()));
//PDF
assertTrue(DateConversionUtils.toDateTime("D:20001218180738+01'00'").toString().equals(getDate(18, 12, 2000, 18, 7, 38).toString()));
assertTrue(DateConversionUtils.toDateTime("D:200012181807+01'00'").toString().equals(getDate(18, 12, 2000, 18, 7, 0).toString()));
assertTrue(DateConversionUtils.toDateTime("D:20001218180738").toString().equals(getDate(18, 12, 2000, 18, 7, 38).toString()));
assertTrue(DateConversionUtils.toDateTime("D:200012181807").toString().equals(getDate(18, 12, 2000, 18, 7, 0).toString()));
assertTrue(DateConversionUtils.toDateTime("D:200012181807Z").toString().equals(getDate(18, 12, 2000, 18, 7, 0).toString()));
assertTrue(DateConversionUtils.toDateTime("D:200212291022+0100").toString().equals(getDate(29, 12, 2002, 10, 22, 0).toString()));
//Mac OS X 10.6.7 Quartz PDFContext
assertTrue(DateConversionUtils.toDateTime("D:20110427120924Z00'00'").toString().equals(getDate(27, 4, 2011, 0, 9, 24).toString()));
assertEquals(DateConversionUtils.DATE_FORMATS.PDF.getString(DateConversionUtils.toDateTime("D:20001218180738+01'00'")) , "D:200012181807+01'00'");
//2005-07-04T00:00:+0Z
assertEquals(DateConversionUtils.DATE_FORMATS.ISO_8601_DATE_TIME.getString(DateConversionUtils.toDateTime("2005-11-04T00:00:+0Z")) , "2005-11-04 01:00Z");
}
private Date getDate(int day, int month, int year) {
Calendar calendar = Calendar.getInstance();
calendar.set(year, month - 1, day, 0, 0, 0);
return calendar.getTime();
}
private Date getDate(int day, int month, int year, int hour, int minute, int second) {
Calendar calendar = Calendar.getInstance();
calendar.set(year, month - 1, day, hour, minute, second);
return calendar.getTime();
}
}