private static Date formatDateStartPeriod()

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