private static Date formatDateEndPeriod()

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);
        }
    }