in SdmxSourceUtil/src/main/java/org/sdmxsource/sdmx/util/date/DateUtil.java [314:412]
private static Date formatDateEndPeriod(String value) {
TimeZone.setDefault(TimeZone.getTimeZone("GMT"));
TIME_FORMAT timeFormat = getTimeFormatOfDate(value);
DateFormat df = getDateFormatter("yyyy-MM-dd'T'HH:mm:ss");
String formatValue = null;
String[] split = null;
int days = 0;
int quarter = 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
splitItem = "-B";
} else if (value.contains("-S")) {
// It's SDMX 2.1
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] + "-06-30T23:59:59";
break;
case 2:
formatValue = split[0] + "-12-31T23:59:59";
break;
}
break;
case HOUR:
formatValue = value;
if (formatValue.length() == 13) { //HOURLY
formatValue = formatValue + ":59:59"; //Add the 59 minutes and 59 seconds
} else if (formatValue.length() == 16) { //MINUTELY
formatValue = formatValue + ":59:59"; //Add the 59 seconds
}
df = getDateFormatter("yyyy-MM-dd'T'HH:mm:ss");//.SSSz
break;
case MONTH:
split = value.split("-M");
cal = getCalendar();
cal.clear();
cal.set(Calendar.YEAR, Integer.parseInt(split[0]));
cal.set(Calendar.MONTH, Integer.parseInt(split[1]) - 1);
days = cal.getActualMaximum(Calendar.DAY_OF_MONTH);
formatValue = split[0] + "-" + split[1] + "-" + days + "T23:59:59";
break;
case QUARTER_OF_YEAR:
split = value.split("-Q");
quarter = Integer.parseInt(split[1]);
switch (quarter) {
case 1:
formatValue = split[0] + "-03-31T23:59:59";
break;
case 2:
formatValue = split[0] + "-06-30T23:59:59";
break;
case 3:
formatValue = split[0] + "-09-30T23:59:59";
break;
case 4:
formatValue = split[0] + "-12-31T23:59:59";
break;
}
break;
case THIRD_OF_YEAR:
break;
case WEEK:
split = value.split("-W");
cal = getCalendar();
cal.set(Calendar.DAY_OF_WEEK, Calendar.SUNDAY);
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 + "-12-31T23:59:59";
break;
default:
throw new SdmxNotImplementedException(ExceptionCode.UNSUPPORTED, "formatting date of type " + timeFormat);
}
try {
return df.parse(formatValue);
} catch (ParseException e) {
throw new IllegalArgumentException(e);
}
}