package ucar.nc2.time;
import static org.junit.Assert.assertEquals;
import java.util.Date;
import org.junit.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* Test CalendarDateFormatter
*
* @author caron
* @since 5/3/12
*/
public class TestCalendarDateFormatter {
private static final Logger logger = LoggerFactory.getLogger(TestCalendarDateFormatter.class);
@Test
public void testBad() {
claimBad("1143848700");
}
@Test
public void testW3cIso() {
claimGood("1997");
claimGood("1997-07");
claimGood("1997-07-16");
claimGood("1997-07-16T19:20+01:00");
claimGood("1997-07-16T19:20:30+01:00");
}
@Test
public void testBasicFormatIso() {
claimGood("19500101T000000Z"); // from https://github.com/Unidata/thredds/issues/772
claimGood("199707");
claimGood("19970716");
claimGood("19970716T1920");
claimGood("19970716T192030");
claimGood("19970716T192030.1");
claimGood("19970716T1920+01:00");
claimGood("19970716T192030+0100");
claimGood("19970716T192030+01");
claimGood("19970716T192030.1+0100");
claimGood("19970716T192030Z");
claimGood("19970716T192030.1Z");
// these should fail
claimBad("19970716T192030.1UTC");
claimBad("19501"); // fail because ambiguous
claimBad("1950112"); // fail because ambiguous
claimBad("19501120T121"); // fail because ambiguous
claimBad("19501120T12151"); // fail because ambiguous
}
@Test
public void testChangeoverDate() {
claimGood("1997-01-01");
claimGood("1582-10-16");
claimGood("1582-10-15");
claimGood("1582-10-01");
claimGood("1582-10-02");
claimGood("1582-10-03");
claimGood("1582-10-04");
//testBase("1582-10-14"); // fail
//testBase("1582-10-06"); // fail
}
// UNIT since [-]Y[Y[Y[Y]]]-MM-DD[(T| )hh[:mm[:ss[.sss*]]][ [+|-]hh[[:]mm]]]
@Test
public void testUdunits() {
claimGood("1992-10-8 15:15:42.5 -6:00");
claimGood("1992-10-8 15:15:42.5 +6");
claimGood("1992-10-8 15:15:42.534");
claimGood("1992-10-8 15:15:42");
claimGood("1992-10-8 15:15");
claimGood("1992-10-8 15");
claimGood("1992-10-8T15");
claimGood("1992-10-8");
claimGood("199-10-8");
claimGood("19-10-8");
claimGood("1-10-8");
claimGood("+1101-10-8");
claimGood("-1101-10-8");
claimGood("1992-10-8T7:00 -6:00");
claimGood("1992-10-8T7:00 +6:00");
claimGood("1992-10-8T7 -6:00");
claimGood("1992-10-8T7 +6:00");
claimGood("1992-10-8 7 -6:00");
claimGood("1992-10-8 7 +6:00");
}
@Test
public void shouldBeSameTime() {
String isoCET = "2012-04-27T16:00:00+0200";
Date cetDate = CalendarDateFormatter.isoStringToDate(isoCET);
String isoMST = "2012-04-27T08:00:00-0600";
Date mstDate = CalendarDateFormatter.isoStringToDate(isoMST);
String isoUTC = "2012-04-27T14:00Z";
Date utcDate = CalendarDateFormatter.isoStringToDate(isoUTC);
assertEquals(mstDate.getTime(), cetDate.getTime()); //This passes -> times with offset are ok
assertEquals(mstDate.getTime(), utcDate.getTime()); //This fails!!
}
@Test
public void shouldHandleOffsetWithoutColon() {
String isoCET = "2012-04-27T16:00:00+0200";
Date cetDate = CalendarDateFormatter.isoStringToDate(isoCET);//We get 2012-04-19T02:00:00-0600 and is
String isoMST = "2012-04-27T08:00:00-0600";
Date mstDate = CalendarDateFormatter.isoStringToDate(isoMST); //Fails here, unable to create a date with 600 hours of offset!!!
String isoUTC = "2012-04-27T14:00Z";
Date utcDate = CalendarDateFormatter.isoStringToDate(isoUTC);
assertEquals(mstDate.getTime(), cetDate.getTime()); //This fails because offset
assertEquals(mstDate.getTime(), utcDate.getTime()); //This fails!!
}
private void claimGood(String s) {
try {
CalendarDate result = CalendarDateFormatter.isoStringToCalendarDate(null, s);
logger.debug("%s == %s%n", s, result);
} catch (Exception e) {
logger.error("FAIL %s%n", s);
e.printStackTrace();
CalendarDateFormatter.isoStringToCalendarDate(null, s);
assert false;
}
}
private void claimBad(String s) {
try {
CalendarDate result = CalendarDateFormatter.isoStringToCalendarDate(null, s);
logger.error("FAIL %s%n", s);
assert false;
} catch (Exception e) {
logger.debug("Expected fail = %s%n", s);
return;
}
}
}