in SdmxSourceUtil/src/main/java/org/sdmxsource/sdmx/util/date/DateUtil.java [214:312]
private static Date formatDateStartPeriod(String value) {
TimeZone.setDefault(TimeZone.getTimeZone("GMT"));
TIME_FORMAT timeFormat = getTimeFormatOfDate(value);
DateFormat df = null;
String formatValue = null;
String[] split = null;
int quarter = 0;
int month = 0;
Calendar cal = null;
switch (timeFormat) {
case DATE:
formatValue = value;
df = getDateFormatter("yyyy-MM-dd");
break;
case DATE_TIME:
break;
case HALF_OF_YEAR:
String splitItem;
if (value.contains("-B")) {
// It's SDMX 2.0 (bi-annual)
splitItem = "-B";
} else if (value.contains("-S")) {
// It's SDMX 2.1 (Reporting Semester)
splitItem = "-S";
} else {
throw new RuntimeException("The observation date: " + value + " does not conform to the half yearly format expected!");
}
split = value.split(splitItem);
quarter = Integer.parseInt(split[1]);
switch (quarter) {
case 1:
formatValue = split[0] + "-01-01";
break;
case 2:
formatValue = split[0] + "-07-01";
break;
}
df = getDateFormatter("yyyy-MM-dd");
break;
case HOUR:
formatValue = value;
if (formatValue.length() == 13) {
df = new SimpleDateFormat("yyyy-MM-dd'T'HH");//.SSSz
} else if (formatValue.length() == 16) {
df = getDateFormatter("yyyy-MM-dd'T'HH:mm");//.SSSz
} else {
df = getDateFormatter("yyyy-MM-dd'T'HH:mm:ss");//.SSSz
}
break;
case MONTH:
split = value.split("-M");
month = Integer.parseInt(split[1]);
formatValue = split[0] + "-" + month + "-01";
df = getDateFormatter("yyyy-MM-dd");
break;
case QUARTER_OF_YEAR:
split = value.split("-Q");
quarter = Integer.parseInt(split[1]);
switch (quarter) {
case 1:
formatValue = split[0] + "-01-01";
break;
case 2:
formatValue = split[0] + "-04-01";
break;
case 3:
formatValue = split[0] + "-07-01";
break;
case 4:
formatValue = split[0] + "-10-01";
break;
}
df = getDateFormatter("yyyy-MM-dd");
break;
case THIRD_OF_YEAR:
break;
case WEEK:
split = value.split("-W");
cal = getCalendar();
cal.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
cal.set(Calendar.YEAR, Integer.parseInt(split[0]));
cal.set(Calendar.WEEK_OF_YEAR, Integer.parseInt(split[1]));
return cal.getTime();
case YEAR:
formatValue = value + "-01-01";
df = getDateFormatter("yyyy-MM-dd");
break;
default:
throw new SdmxNotImplementedException(ExceptionCode.UNSUPPORTED, "formatting date of type " + timeFormat);
}
try {
return df.parse(formatValue);
} catch (ParseException e) {
throw new IllegalArgumentException(e);
}
}