Example usage for org.joda.time DateTime minusWeeks

List of usage examples for org.joda.time DateTime minusWeeks

Introduction

In this page you can find the example usage for org.joda.time DateTime minusWeeks.

Prototype

public DateTime minusWeeks(int weeks) 

Source Link

Document

Returns a copy of this datetime minus the specified number of weeks.

Usage

From source file:cron.DateTimes.java

License:Open Source License

public static DateTime lastOfMonth(DateTime t, int dayOfWeek) {
    DateTime friday = t.dayOfMonth().withMaximumValue().withDayOfWeek(dayOfWeek);
    if (friday.getMonthOfYear() != t.getMonthOfYear())
        friday = friday.minusWeeks(1);
    return friday;
}

From source file:ddf.metrics.plugin.webconsole.MetricsWebConsolePlugin.java

License:Open Source License

void addWeeklyReportUrls(PrintWriter pw, int numWeeklyReports, String metricsServiceUrl) {
    DateTime input = newDateTime();
    LOGGER.debug("NOW:  {}", input);

    for (int i = 1; i <= numWeeklyReports; i++) {
        try {// w w w . j  a v  a2s.c  o m
            DateMidnight startOfLastWeek = new DateMidnight(
                    input.minusWeeks(i).withDayOfWeek(DateTimeConstants.MONDAY));
            String startDate = urlEncodeDate(startOfLastWeek);
            LOGGER.debug("Previous Week {} (start):  {}", i, startDate);

            DateTime endOfLastWeek = startOfLastWeek.plusDays(DateTimeConstants.DAYS_PER_WEEK).toDateTime()
                    .minus(1 /* millisecond */);
            String endDate = urlEncodeDate(endOfLastWeek);
            LOGGER.debug("Previous Week {} (end):  ", i, endDate);

            startTableRow(pw, i);
            addCellLabelForRange(pw, startOfLastWeek, endOfLastWeek);
            addXLSCellLink(pw, startDate, endDate, metricsServiceUrl);
            addPPTCellLink(pw, startDate, endDate, metricsServiceUrl);
            endTableRow(pw);
        } catch (UnsupportedEncodingException e) {
            LOGGER.info("Unsupported encoding exception adding weekly reports", e);
        }
    }
}

From source file:edu.illinois.cs.cogcomp.temporal.normalizer.main.timex2interval.ModifiedDate.java

License:Open Source License

/**
 *
 * @param start the start point (anchor time) of the Phrase
 * @param temporalPhrase// ww w  .ja  v a2  s.  com
  * @return
  */
public static TimexChunk ModifiedRule(DateTime start, TemporalPhrase temporalPhrase) {
    String phrase = temporalPhrase.getPhrase();
    phrase = phrase.trim();

    // ###################################################preprocess
    // 1################################################
    String preprocess = "\\A(" + timeofDay + "|" + modIndicator + ")\\s*(" + weekday + ")\\Z";
    Pattern pattern11 = Pattern.compile(preprocess);
    Matcher matcher11 = pattern11.matcher(phrase);
    boolean matcher11Found = matcher11.find();

    if (matcher11Found) {
        TimexChunk tc = new TimexChunk();
        tc.addAttribute(TimexNames.type, TimexNames.DATE);
        String secondphrase = new String();
        // split the Phrase into two parts
        // TODO: write converter to convert TIMEX3 to datepoint
        String firstphrase = "this" + matcher11.group(2);
        tc = ModifiedDate.ModifiedRule(start, new TemporalPhrase(firstphrase, temporalPhrase.getTense()));
        if (matcher11.group(1).contains("early") || matcher11.group(1).contains("earlier")) {

            tc.addAttribute(TimexNames.mod, TimexNames.START);
        }

        else if (matcher11.group(1).contains("late") || matcher11.group(1).contains("later")) {
            tc.addAttribute(TimexNames.mod, TimexNames.END);
        }

        else {
            secondphrase = matcher11.group(1);
            String revertStr = firstphrase + " " + secondphrase;
            temporalPhrase.setPhrase(revertStr);
            return ModifiedDate.ModifiedRule(start, temporalPhrase);
        }
        return tc;

    }

    // ###################################################preprocess
    // 2################################################

    String ownprocess = "\\A(" + weekday + ")\\s*(" + timeofDay + ")\\Z";
    Pattern pattern2 = Pattern.compile(ownprocess);
    Matcher matcher2 = pattern2.matcher(phrase);
    boolean matcher2Found = matcher2.find();
    if (matcher2Found) {
        // split the Phrase into two parts
        String firstphrase = "this" + matcher2.group(1);
        String secondphrase = "this" + matcher2.group(2);
        TimexChunk keypoint = ModifiedDate.ModifiedRule(start,
                new TemporalPhrase(firstphrase, temporalPhrase.getTense()));
        String normVal = keypoint.getAttributes().get(TimexNames.value);
        DateTimeFormatter fmt = DateTimeFormat.forPattern("yyyy-MM-dd");
        DateTime starttime = fmt.parseDateTime(normVal);
        TimexChunk result = ModifiedDate.ModifiedRule(starttime,
                new TemporalPhrase(secondphrase, temporalPhrase.getTense()));
        return result;

    }

    //String monther = "(?:jan(?:uary)?|feb(?:ruary)?|mar(?:ch)?|apr(?:il)?|may?|jun(?:e)?|jul(?:y)?|aug(?:ust)?|sept(?:ember)?|oct(?:ober)?|nov(?:ember)?|dec(?:ember)?|year)";
    String monther = "(" + KnowledgeBase.monther + ")";
    //String specialterm = "\\A(?:morning|afternoon|noon|evening|night|spring|fall|summer|winter|mon(?:day)?|tues(?:day)?|wed(?:nesday)?|thur(?:sday)?|fri(?:day)?|sat(?:urday)?|sun(?:day)?)\\Z";
    String specialterm = "\\A(" + timeofDay + "|" + season + "|" + weekday + ")\\Z";
    Pattern onepattern = Pattern.compile(specialterm);

    Matcher onematcher = onepattern.matcher(phrase);
    boolean onematchFound = onematcher.find();
    if (onematchFound) {
        phrase = "this " + onematcher.group(0);
    }

    int numterm;
    DateMapping temp = DateMapping.getInstance();
    int i;
    int dayweek;
    int year;
    int month = 1;
    int day;
    int flagbefore = -1;
    int flagafter = -1;
    String thisTimeOfDay = "";
    int prematchDay = -1;
    DateTime finish;
    String temp1;
    String temp2;
    Interval interval;
    interval = new Interval(start, start);
    phrase = phrase.toLowerCase();
    int preflag = -1;
    if (phrase.equals("tonight")) {
        phrase = "today night";
    }
    if (phrase.contains("before")) {

        phrase = phrase.replaceAll("before", "");
        phrase = phrase.trim();
        flagbefore = 1;
    }
    if (phrase.contains("\\Aafter\\Z")) {
        phrase = phrase.replaceAll("after", "");
        phrase = phrase.trim();
        flagafter = 1;
    }

    String spepatternStr = "(" + timeofDay + "|" + season + "|" + weekday + ")\\s*(" + shiftIndicator + ")\\s*("
            + dateUnit + ")";
    Pattern spepattern = Pattern.compile(spepatternStr);
    Matcher spematcher = spepattern.matcher(phrase);
    boolean spematchFound = spematcher.find();
    if (spematchFound) {
        String group1 = spematcher.group(1);
        String group2 = spematcher.group(2);
        // String group3 = spematcher.group(3);

        phrase = group2 + " " + group1;

    }

    String patternStr = "\\s*(" + shiftIndicator + "|" + modIndicator + "|" + specialDayTerm + ")\\s*("
            + timeofDay + "|" + dateUnit + "|" + weekday + "|" + season + "|" + KnowledgeBase.monther + ")";
    Pattern pattern = Pattern.compile(patternStr);
    Matcher matcher = pattern.matcher(phrase);
    boolean matchFound = matcher.find();
    TimexChunk tc = new TimexChunk();
    DateTimeFormatter fmt = DateTimeFormat.forPattern("yyyy-MM-dd");
    DateTimeFormatter ymFmt = DateTimeFormat.forPattern("yyyy-MM");
    DateTimeFormatter yFmt = DateTimeFormat.forPattern("yyyy");
    if (matchFound) {
        for (i = 1; i <= 2; i++) {
            if (matcher.group(i) == null) {
                i--;
                break;
            }
        }
        if (i == 3) {
            i--;
        }
        numterm = i;
        if (numterm == 2) {
            // group(0) returns the whole detected string which matches the
            // pattern
            String origPhrase = phrase;
            phrase = phrase.replaceAll(matcher.group(0), "");
            phrase = phrase.trim();
            String prepatternStr = "(" + KnowledgeBase.monther + "|year)";
            Pattern prepattern = Pattern.compile(prepatternStr);
            Matcher prematcher = prepattern.matcher(phrase);
            boolean prematchFound = prematcher.find();
            if (prematchFound) {
                if (temp.hm.containsKey(prematcher.group(1))) {
                    month = Integer.parseInt(temp.hm.get(prematcher.group(1)));

                    preflag = 1;
                }
            }

            prepatternStr = "(\\d+)";
            prepattern = Pattern.compile(prepatternStr);
            prematcher = prepattern.matcher(phrase);
            prematchFound = prematcher.find();
            if (prematchFound) {
                int dayInt = Integer.parseInt(prematcher.group(1));
                if (dayInt > 0 && dayInt < 32) {
                    prematchDay = dayInt;
                    preflag = 1;
                }
            }

            prepatternStr = "(" + weekday + ")";
            prepattern = Pattern.compile(prepatternStr);
            prematcher = prepattern.matcher(phrase);
            prematchFound = prematcher.find();
            if (prematchFound) {
                if (temp.hm.containsKey(prematcher.group(1))) {
                    prematchDay = Integer.parseInt(temp.hm.get(prematcher.group(1)));
                    preflag = 1;
                }
            }

            prepatternStr = "(" + timeofDay + ")";
            prepattern = Pattern.compile(prepatternStr);
            prematcher = prepattern.matcher(phrase);
            prematchFound = prematcher.find();
            if (prematchFound) {
                if (unitMap.containsKey(prematcher.group(1))) {
                    thisTimeOfDay = unitMap.get(prematcher.group(1));
                    preflag = 1;
                }
            }

            else {
                String backPatt = "(early|earlier|begin(?:ing)?|start)";

                Pattern backPa = Pattern.compile(backPatt);
                Matcher backmatcher = backPa.matcher(phrase);
                boolean backFound = backmatcher.find();

                if (backFound) {
                    // 2 means early
                    preflag = 2;
                }

                else {
                    String backPatter = "(late|later|end)";
                    Pattern backPater = Pattern.compile(backPatter);
                    Matcher backmatch = backPater.matcher(phrase);
                    boolean backFounder = backmatch.find();
                    if (backFounder) {
                        // 3 means late
                        preflag = 3;
                    }

                }

            }

            temp1 = matcher.group(1);
            temp2 = matcher.group(2);

            if (temp1.equals("last") || temp1.equals("past") || temp1.equals("previous")
                    || temp1.equals("yesterday")) {

                if (temp2.equals("year")) {
                    finish = start.minusYears(1);

                    year = finish.getYear();
                    if (preflag == 1) {

                        if (flagbefore == 1) {

                            finish = new DateTime(year, month, 1, 23, 59, 59, 59);
                            finish = finish.minusDays(1);
                            String normVal = fmt.print(finish);
                            tc.addAttribute(TimexNames.type, TimexNames.DATE);
                            tc.addAttribute(TimexNames.value, normVal);
                            tc.addAttribute(TimexNames.mod, TimexNames.BEFORE);
                            return tc;
                        }

                        else if (flagafter == 1) {
                            finish = new DateTime(year, month, 1, 0, 0, 0, 0);
                            finish = finish.dayOfMonth().withMaximumValue();
                            finish = finish.minusDays(-1);
                            String normVal = fmt.print(finish);
                            tc.addAttribute(TimexNames.type, TimexNames.DATE);
                            tc.addAttribute(TimexNames.value, normVal);
                            tc.addAttribute(TimexNames.mod, TimexNames.AFTER);
                            return tc;
                        }
                        finish = new DateTime(year, month, 1, 23, 59, 59, 59);
                        finish = finish.dayOfMonth().withMaximumValue();
                        String normVal = ymFmt.print(finish);
                        tc.addAttribute(TimexNames.type, TimexNames.DATE);
                        tc.addAttribute(TimexNames.value, normVal);
                        return tc;
                    }

                    else if (preflag == 2) {

                        tc.addAttribute(TimexNames.type, TimexNames.DATE);
                        tc.addAttribute(TimexNames.value, String.valueOf(year));
                        tc.addAttribute(TimexNames.mod, TimexNames.START);
                        return tc;
                    }

                    else if (preflag == 3) {
                        tc.addAttribute(TimexNames.type, TimexNames.DATE);
                        tc.addAttribute(TimexNames.value, String.valueOf(year));
                        tc.addAttribute(TimexNames.mod, TimexNames.END);
                        return tc;
                    }

                    else {
                        tc.addAttribute(TimexNames.type, TimexNames.DATE);
                        tc.addAttribute(TimexNames.value, String.valueOf(year));
                        return tc;
                    }
                }

                else if (temp2.equals("month")) {

                    finish = start.minusMonths(1);
                    year = finish.getYear();
                    month = finish.getMonthOfYear();
                    finish = finish.dayOfMonth().withMaximumValue();
                    day = finish.getDayOfMonth();
                    start = new DateTime(year, month, 1, 0, 0, 0, 0);
                    finish = new DateTime(year, month, day, 23, 59, 59, 59);
                    interval = new Interval(start, finish);
                    tc.addAttribute(TimexNames.type, TimexNames.DATE);
                    tc.addAttribute(TimexNames.value, ymFmt.print(finish));
                    if (preflag == 1) {
                        finish = new DateTime(year, month, prematchDay, 23, 59, 59, 59);
                        tc.addAttribute(TimexNames.value, fmt.print(finish));
                    } else if (preflag == 2) {
                        tc.addAttribute(TimexNames.value, fmt.print(finish));
                        tc.addAttribute(TimexNames.mod, TimexNames.START);
                    }

                    else if (preflag == 3) {
                        start = new DateTime(year, month, day - 10, 0, 0, 0, 0);
                        finish = new DateTime(year, month, day, 23, 59, 59, 59);
                        interval = new Interval(start, finish);
                        tc.addAttribute(TimexNames.value, fmt.print(finish));
                        tc.addAttribute(TimexNames.mod, TimexNames.END);
                    }
                    return tc;
                }

                else if (temp2.equals("week")) {
                    finish = start.minusWeeks(1);
                    dayweek = finish.getDayOfWeek();
                    finish = finish.minusDays(dayweek - 1);
                    year = finish.getYear();
                    month = finish.getMonthOfYear();
                    day = finish.getDayOfMonth();
                    start = new DateTime(year, month, day, 0, 0, 0, 0);
                    finish = finish.minusDays(-6);
                    year = finish.getYear();
                    month = finish.getMonthOfYear();
                    day = finish.getDayOfMonth();
                    finish = new DateTime(year, month, day, 23, 59, 59, 59);
                    interval = new Interval(start, finish);
                    tc.addAttribute(TimexNames.type, TimexNames.DATE);
                    if (preflag == 1) {
                        String weekIdx = String.valueOf(finish.getWeekOfWeekyear());
                        weekIdx = weekIdx.length() == 1 ? "0" + weekIdx : weekIdx;
                        tc.addAttribute(TimexNames.value,
                                String.valueOf(year) + "-W" + weekIdx + "-" + String.valueOf(prematchDay));
                    }
                    if (preflag == 2) {
                        finish = start.minusDays(-2);
                        year = finish.getYear();
                        month = finish.getMonthOfYear();
                        day = finish.getDayOfMonth();
                        finish = new DateTime(year, month, day, 23, 59, 59, 59);
                        String weekIdx = String.valueOf(finish.getWeekOfWeekyear());
                        weekIdx = weekIdx.length() == 1 ? "0" + weekIdx : weekIdx;
                        tc.addAttribute(TimexNames.value, String.valueOf(year) + "-W" + weekIdx);
                        tc.addAttribute(TimexNames.mod, TimexNames.START);
                    }

                    else if (preflag == 3) {
                        start = start.minusDays(-4);
                        year = start.getYear();
                        month = start.getMonthOfYear();
                        day = start.getDayOfMonth();
                        start = new DateTime(year, month, day, 0, 0, 0, 0);

                        String weekIdx = String.valueOf(start.getWeekOfWeekyear());
                        weekIdx = weekIdx.length() == 1 ? "0" + weekIdx : weekIdx;
                        tc.addAttribute(TimexNames.value, String.valueOf(year) + "-W" + weekIdx);
                        tc.addAttribute(TimexNames.mod, TimexNames.END);

                    } else {
                        String weekIdx = String.valueOf(start.getWeekOfWeekyear());
                        tc.addAttribute(TimexNames.value, String.valueOf(year) + "-W" + weekIdx);
                    }
                    return tc;
                }

                else if (temp2.equals("weekend")) {
                    dayweek = start.getDayOfWeek();
                    finish = start.minusDays(dayweek + 1);
                    year = finish.getYear();
                    month = finish.getMonthOfYear();
                    day = finish.getDayOfMonth();
                    start = new DateTime(year, month, day, 0, 0, 0, 0);
                    finish = start.minusDays(-1);
                    day = finish.getDayOfMonth();
                    finish = new DateTime(year, month, day, 23, 59, 59, 59);
                    String weekIdx = String.valueOf(finish.getWeekOfWeekyear());
                    weekIdx = weekIdx.length() == 1 ? "0" + weekIdx : weekIdx;
                    tc.addAttribute(TimexNames.value, String.valueOf(year) + "-W" + weekIdx + "-WE");
                    return tc;

                    /* TODO: I commented out these three cases for now because they don't make sense
                     using TIMEX3 standard
                     */
                }
                //                else if (temp2.equals("hour")) {
                //                  finish = start.minusHours(1);
                //                  interval = new Interval(finish, start);
                //                  return interval;
                //               }
                //
                //               else if (temp2.equals("minute")) {
                //                  finish = start.minusMinutes(1);
                //                  interval = new Interval(finish, start);
                //                  return interval;
                //               }
                //
                //               else if (temp2.equals("second")) {
                //                  finish = start.minusSeconds(1);
                //                  interval = new Interval(finish, start);
                //                  return interval;
                //               }

                else if (temp2.equals("century")) {
                    finish = start.minusYears(100);
                    year = finish.getCenturyOfEra();
                    year = year * 100;
                    start = new DateTime(year, 1, 1, 0, 0, 0, 0);
                    finish = new DateTime(year + 99, 12, 31, 23, 59, 59, 59);
                    tc.addAttribute(TimexNames.type, TimexNames.DATE);
                    tc.addAttribute(TimexNames.value, String.valueOf(finish.getCenturyOfEra()));
                    return tc;
                }

                else if (temp2.equals("decade")) {
                    finish = start.minusYears(10);
                    year = finish.getCenturyOfEra();
                    year = year * 100;
                    start = new DateTime(year, 1, 1, 0, 0, 0, 0);
                    finish = new DateTime(year + 9, 12, 31, 23, 59, 59, 59);
                    tc.addAttribute(TimexNames.type, TimexNames.DATE);
                    tc.addAttribute(TimexNames.value, String.valueOf(finish.getCenturyOfEra() * 10));
                    return tc;
                }

                else if (temp2.equals("mon") || temp2.equals("monday")) {
                    dayweek = start.getDayOfWeek();
                    finish = start.minusDays(dayweek + 6);
                    year = finish.getYear();
                    month = finish.getMonthOfYear();
                    day = finish.getDayOfMonth();
                    start = new DateTime(year, month, day, 0, 0, 0, 0);
                    finish = new DateTime(year, month, day, 23, 59, 59, 59);
                    tc.addAttribute(TimexNames.type, TimexNames.DATE);
                    tc.addAttribute(TimexNames.value, fmt.print(finish));
                    if (preflag == 1) {
                        tc.addAttribute(TimexNames.value,
                                tc.getAttribute(TimexNames.value) + "T" + thisTimeOfDay);
                    }
                    return tc;
                }

                else if (temp2.equals("tues") || temp2.equals("tuesday")) {
                    dayweek = start.getDayOfWeek();
                    finish = start.minusDays(dayweek + 5);
                    year = finish.getYear();
                    month = finish.getMonthOfYear();
                    day = finish.getDayOfMonth();
                    start = new DateTime(year, month, day, 0, 0, 0, 0);
                    finish = new DateTime(year, month, day, 23, 59, 59, 59);
                    tc.addAttribute(TimexNames.type, TimexNames.DATE);
                    tc.addAttribute(TimexNames.value, fmt.print(finish));
                    if (preflag == 1) {
                        tc.addAttribute(TimexNames.value,
                                tc.getAttribute(TimexNames.value) + "T" + thisTimeOfDay);
                    }
                    return tc;
                }

                else if (temp2.equals("wed") || temp2.equals("wednesday")) {
                    dayweek = start.getDayOfWeek();
                    finish = start.minusDays(dayweek + 4);
                    year = finish.getYear();
                    month = finish.getMonthOfYear();
                    day = finish.getDayOfMonth();
                    start = new DateTime(year, month, day, 0, 0, 0, 0);
                    finish = new DateTime(year, month, day, 23, 59, 59, 59);
                    tc.addAttribute(TimexNames.type, TimexNames.DATE);
                    tc.addAttribute(TimexNames.value, fmt.print(finish));
                    if (preflag == 1) {
                        tc.addAttribute(TimexNames.value,
                                tc.getAttribute(TimexNames.value) + "T" + thisTimeOfDay);
                    }
                    return tc;
                }

                else if (temp2.equals("thur") || temp2.equals("thursday")) {
                    dayweek = start.getDayOfWeek();
                    finish = start.minusDays(dayweek + 3);
                    year = finish.getYear();
                    month = finish.getMonthOfYear();
                    day = finish.getDayOfMonth();
                    start = new DateTime(year, month, day, 0, 0, 0, 0);
                    finish = new DateTime(year, month, day, 23, 59, 59, 59);
                    tc.addAttribute(TimexNames.type, TimexNames.DATE);
                    tc.addAttribute(TimexNames.value, fmt.print(finish));
                    if (preflag == 1) {
                        tc.addAttribute(TimexNames.value,
                                tc.getAttribute(TimexNames.value) + "T" + thisTimeOfDay);
                    }
                    return tc;
                }

                else if (temp2.equals("fri") || temp2.equals("friday")) {
                    dayweek = start.getDayOfWeek();
                    finish = start.minusDays(dayweek + 2);
                    year = finish.getYear();
                    month = finish.getMonthOfYear();
                    day = finish.getDayOfMonth();
                    start = new DateTime(year, month, day, 0, 0, 0, 0);
                    finish = new DateTime(year, month, day, 23, 59, 59, 59);
                    tc.addAttribute(TimexNames.type, TimexNames.DATE);
                    tc.addAttribute(TimexNames.value, fmt.print(finish));
                    if (preflag == 1) {
                        tc.addAttribute(TimexNames.value,
                                tc.getAttribute(TimexNames.value) + "T" + thisTimeOfDay);
                    }
                    return tc;
                }

                else if (temp2.equals("sat") || temp2.equals("saturday")) {
                    dayweek = start.getDayOfWeek();
                    finish = start.minusDays(dayweek + 1);
                    year = finish.getYear();
                    month = finish.getMonthOfYear();
                    day = finish.getDayOfMonth();
                    start = new DateTime(year, month, day, 0, 0, 0, 0);
                    finish = new DateTime(year, month, day, 23, 59, 59, 59);
                    tc.addAttribute(TimexNames.type, TimexNames.DATE);
                    tc.addAttribute(TimexNames.value, fmt.print(finish));
                    if (preflag == 1) {
                        tc.addAttribute(TimexNames.value,
                                tc.getAttribute(TimexNames.value) + "T" + thisTimeOfDay);
                    }
                    return tc;
                }

                else if (temp2.equals("sun") || temp2.equals("sunday")) {
                    dayweek = start.getDayOfWeek();
                    finish = start.minusDays(dayweek);
                    year = finish.getYear();
                    month = finish.getMonthOfYear();
                    day = finish.getDayOfMonth();
                    start = new DateTime(year, month, day, 0, 0, 0, 0);
                    finish = new DateTime(year, month, day, 23, 59, 59, 59);
                    tc.addAttribute(TimexNames.type, TimexNames.DATE);
                    tc.addAttribute(TimexNames.value, fmt.print(finish));
                    if (preflag == 1) {
                        tc.addAttribute(TimexNames.value,
                                tc.getAttribute(TimexNames.value) + "T" + thisTimeOfDay);
                    }
                    return tc;
                }

                else if (temp2.equals("morning")) {
                    finish = start.minusDays(1);
                    year = finish.getYear();
                    month = finish.getMonthOfYear();
                    day = finish.getDayOfMonth();
                    start = new DateTime(year, month, day, 7, 0, 0, 0);
                    finish = new DateTime(year, month, day, 10, 59, 59, 59);
                    tc.addAttribute(TimexNames.type, TimexNames.TIME);
                    tc.addAttribute(TimexNames.value, fmt.print(finish) + TimexNames.MORNING);
                    return tc;
                }

                else if (temp2.equals("noon")) {
                    finish = start.minusDays(1);
                    year = finish.getYear();
                    month = finish.getMonthOfYear();
                    day = finish.getDayOfMonth();
                    start = new DateTime(year, month, day, 11, 0, 0, 0);
                    finish = new DateTime(year, month, day, 13, 59, 59, 59);
                    tc.addAttribute(TimexNames.type, TimexNames.TIME);
                    tc.addAttribute(TimexNames.value, fmt.print(finish) + TimexNames.NOON);
                    return tc;
                }

                else if (temp2.equals("afternoon")) {
                    finish = start.minusDays(1);
                    year = finish.getYear();
                    month = finish.getMonthOfYear();
                    day = finish.getDayOfMonth();
                    start = new DateTime(year, month, day, 14, 0, 0, 0);
                    finish = new DateTime(year, month, day, 17, 59, 59, 59);
                    tc.addAttribute(TimexNames.type, TimexNames.TIME);
                    tc.addAttribute(TimexNames.value, fmt.print(finish) + TimexNames.AFTERNOON);
                    return tc;
                }

                else if (temp2.equals("evening")) {
                    finish = start.minusDays(1);
                    year = finish.getYear();
                    month = finish.getMonthOfYear();
                    day = finish.getDayOfMonth();
                    start = new DateTime(year, month, day, 18, 0, 0, 0);
                    finish = new DateTime(year, month, day, 20, 59, 59, 59);
                    tc.addAttribute(TimexNames.type, TimexNames.TIME);
                    tc.addAttribute(TimexNames.value, fmt.print(finish) + TimexNames.EVENING);
                    return tc;
                }

                else if (temp2.equals("night")) {
                    finish = start.minusDays(1);
                    year = finish.getYear();
                    month = finish.getMonthOfYear();
                    day = finish.getDayOfMonth();
                    start = new DateTime(year, month, day, 21, 0, 0, 0);
                    finish = new DateTime(year, month, day, 23, 59, 59, 59);
                    tc.addAttribute(TimexNames.type, TimexNames.TIME);
                    tc.addAttribute(TimexNames.value, fmt.print(finish) + TimexNames.NIGHT);
                    return tc;
                }

                else if (temp2.equals("day")) {
                    finish = start.minusDays(1);
                    year = finish.getYear();
                    month = finish.getMonthOfYear();
                    day = finish.getDayOfMonth();
                    start = new DateTime(year, month, day, 0, 0, 0, 0);
                    finish = new DateTime(year, month, day, 23, 59, 59, 59);
                    tc.addAttribute(TimexNames.type, TimexNames.DATE);
                    tc.addAttribute(TimexNames.value, fmt.print(finish));
                    return tc;
                }

                else if (temp2.equals("spring")) {
                    finish = start.minusYears(1);
                    year = finish.getYear();
                    start = new DateTime(year, 3, 1, 0, 0, 0, 0);
                    finish = new DateTime(year, 5, 31, 23, 59, 59, 59);
                    tc.addAttribute(TimexNames.type, TimexNames.DATE);
                    tc.addAttribute(TimexNames.value, yFmt.print(finish) + "-" + TimexNames.SPRING);
                    return tc;
                }

                else if (temp2.equals("summer")) {
                    finish = start.minusYears(1);
                    year = finish.getYear();
                    start = new DateTime(year, 6, 1, 0, 0, 0, 0);
                    finish = new DateTime(year, 8, 31, 23, 59, 59, 59);
                    tc.addAttribute(TimexNames.type, TimexNames.DATE);
                    tc.addAttribute(TimexNames.value, yFmt.print(finish) + "-" + TimexNames.SUMMER);
                    return tc;
                }

                else if (temp2.equals("fall") || temp2.equals("autumn")) {
                    finish = start.minusYears(1);
                    year = finish.getYear();
                    start = new DateTime(year, 9, 1, 0, 0, 0, 0);
                    finish = new DateTime(year, 11, 30, 23, 59, 59, 59);
                    tc.addAttribute(TimexNames.type, TimexNames.DATE);
                    tc.addAttribute(TimexNames.value, yFmt.print(finish) + "-" + TimexNames.FALL);
                    return tc;
                }

                else if (temp2.equals("winter")) {
                    finish = start.minusYears(2);
                    year = finish.getYear();
                    start = new DateTime(year, 12, 1, 0, 0, 0, 0);
                    finish = new DateTime(year + 1, 2, 28, 23, 59, 59, 59);
                    tc.addAttribute(TimexNames.type, TimexNames.DATE);
                    tc.addAttribute(TimexNames.value, yFmt.print(finish) + "-" + TimexNames.WINTER);
                    return tc;
                }

                // If we have (last|previous|...)(month)
                else {
                    String patternStr1 = monther;
                    Pattern pattern1 = Pattern.compile(patternStr1);
                    Matcher matcher1 = pattern1.matcher(temp2);
                    boolean matchFound1 = matcher1.find();
                    if (matchFound1) {
                        month = Integer.parseInt(temp.hm.get(temp2));
                        finish = start.minusYears(1);
                        year = finish.getYear();
                        finish = new DateTime(year, month, 1, 23, 59, 59, 59);
                        finish = finish.dayOfMonth().withMaximumValue();
                        start = new DateTime(year, month, 1, 0, 0, 0, 0);
                        tc.addAttribute(TimexNames.type, TimexNames.DATE);
                        tc.addAttribute(TimexNames.value, ymFmt.print(finish));
                        if (preflag == 2) {
                            finish = new DateTime(year, month, 10, 23, 59, 59, 59);
                            start = new DateTime(year, month, 1, 0, 0, 0, 0);
                            tc.addAttribute(TimexNames.mod, TimexNames.START);
                        }

                        else if (preflag == 3) {
                            start = new DateTime(year, month, 20, 0, 0, 0, 0);
                            tc.addAttribute(TimexNames.mod, TimexNames.END);
                        }
                        return tc;
                    } else {
                        return null;
                    }

                }
            }

            else if (temp1.equals("early") || temp1.equals("earlier")) {
                tc.addAttribute(TimexNames.mod, TimexNames.START);
                if (temp2.equals("century")) {

                    year = start.getCenturyOfEra();
                    year = year * 100;
                    start = new DateTime(year, 1, 1, 0, 0, 0, 0);
                    finish = new DateTime(year + 20, 12, 31, 23, 59, 59, 59);
                    tc.addAttribute(TimexNames.type, TimexNames.DATE);
                    tc.addAttribute(TimexNames.value, String.valueOf(finish.getCenturyOfEra()));
                    return tc;
                } else if (temp2.equals("decade")) {
                    year = start.getCenturyOfEra();
                    year = year * 100;
                    start = new DateTime(year, 1, 1, 0, 0, 0, 0);
                    finish = new DateTime(year + 2, 12, 31, 23, 59, 59, 59);
                    //interval = new Interval(start, finish);
                    tc.addAttribute(TimexNames.type, TimexNames.DATE);
                    tc.addAttribute(TimexNames.value, String.valueOf(finish.getCenturyOfEra() * 10));
                    return tc;
                }

                else if (temp2.equals("year")) {
                    year = start.getYear();

                    start = new DateTime(year, 1, 1, 0, 0, 0, 0);
                    finish = new DateTime(year, 3, 31, 23, 59, 59, 59);
                    tc.addAttribute(TimexNames.type, TimexNames.DATE);
                    tc.addAttribute(TimexNames.value, yFmt.print(finish));
                    return tc;

                }

                else if (temp2.equals("month")) {
                    year = start.getYear();
                    month = start.getMonthOfYear();
                    finish = start.dayOfMonth().withMaximumValue();
                    day = finish.getDayOfMonth();
                    start = new DateTime(year, month, 1, 0, 0, 0, 0);
                    finish = new DateTime(year, month, 10, 23, 59, 59, 59);
                    tc.addAttribute(TimexNames.type, TimexNames.DATE);
                    tc.addAttribute(TimexNames.value, ymFmt.print(finish));
                    return tc;
                }

                else if (temp2.equals("week")) {
                    dayweek = start.getDayOfWeek();
                    start = start.minusDays(dayweek - 1);
                    year = start.getYear();
                    month = start.getMonthOfYear();
                    day = start.getDayOfMonth();
                    start = new DateTime(year, month, day, 0, 0, 0, 0);
                    finish = start.minusDays(-2);
                    year = finish.getYear();
                    month = finish.getMonthOfYear();
                    day = finish.getDayOfMonth();
                    finish = new DateTime(year, month, day, 23, 59, 59, 59);
                    String weekIdx = String.valueOf(finish.getWeekOfWeekyear());
                    weekIdx = weekIdx.length() == 1 ? "0" + weekIdx : weekIdx;
                    tc.addAttribute(TimexNames.type, TimexNames.DATE);
                    tc.addAttribute(TimexNames.value, String.valueOf(year) + "-W" + weekIdx);
                    return tc;
                }

                else {
                    // This part only focus on "early" + "[month]"
                    // Modified by Zhili: if the sentence is past tense, and the month mentioned is
                    // after DCT, then subtract 1 from year
                    String tense = temporalPhrase.getTense();
                    String patternStr1 = monther;
                    Pattern pattern1 = Pattern.compile(patternStr1);
                    Matcher matcher1 = pattern1.matcher(temp2);
                    boolean matchFound1 = matcher1.find();
                    if (matchFound1) {
                        month = Integer.parseInt(temp.hm.get(temp2));
                        year = start.getYear();
                        if (tense.equals("past") && start.getMonthOfYear() < month) {
                            year -= 1;
                        } else if (!tense.equals("past") && start.getMonthOfYear() > month) {
                            year += 1;
                        }
                        finish = new DateTime(year, month, 10, 23, 59, 59, 59);
                        start = new DateTime(year, month, 1, 0, 0, 0, 0);
                        tc.addAttribute(TimexNames.type, TimexNames.DATE);
                        tc.addAttribute(TimexNames.value, ymFmt.print(finish));
                        return tc;
                    } else {
                        return null;
                    }

                }

            }

            else if (temp1.equals("late") || temp1.equals("later")) {
                tc.addAttribute(TimexNames.mod, TimexNames.END);
                tc.addAttribute(TimexNames.type, TimexNames.DATE);
                if (temp2.equals("century")) {

                    year = start.getCenturyOfEra();
                    year = year * 100;
                    start = new DateTime(year + 80, 1, 1, 0, 0, 0, 0);
                    finish = new DateTime(year + 99, 12, 31, 23, 59, 59, 59);
                    tc.addAttribute(TimexNames.value, String.valueOf(finish.getCenturyOfEra()));
                    return tc;
                }

                else if (temp2.equals("decade")) {
                    year = start.getCenturyOfEra();
                    year = year * 100;
                    start = new DateTime(year + 8, 1, 1, 0, 0, 0, 0);
                    finish = new DateTime(year + 9, 12, 31, 23, 59, 59, 59);
                    //interval = new Interval(start, finish);
                    tc.addAttribute(TimexNames.type, TimexNames.DATE);
                    tc.addAttribute(TimexNames.value, String.valueOf(finish.getCenturyOfEra() * 10));
                    return tc;
                }

                else if (temp2.equals("year")) {
                    year = start.getYear();

                    start = new DateTime(year, 10, 1, 0, 0, 0, 0);
                    finish = new DateTime(year, 12, 31, 23, 59, 59, 59);
                    interval = new Interval(start, finish);
                    tc.addAttribute(TimexNames.value, yFmt.print(finish));
                    return tc;

                }

                else if (temp2.equals("month")) {
                    year = start.getYear();
                    month = start.getMonthOfYear();
                    finish = start.dayOfMonth().withMaximumValue();
                    day = finish.getDayOfMonth();
                    start = new DateTime(year, month, day - 10, 0, 0, 0, 0);
                    finish = new DateTime(year, month, day, 23, 59, 59, 59);
                    tc.addAttribute(TimexNames.value, ymFmt.print(finish));
                    return tc;
                }

                else {
                    String patternStr1 = monther;
                    Pattern pattern1 = Pattern.compile(patternStr1);
                    Matcher matcher1 = pattern1.matcher(temp2);
                    boolean matchFound1 = matcher1.find();
                    if (matchFound1) {
                        month = Integer.parseInt(temp.hm.get(temp2));
                        year = start.getYear();
                        String tense = temporalPhrase.getTense();
                        if (tense.equals("past") && start.getMonthOfYear() < month) {
                            year -= 1;
                        } else if (!tense.equals("past") && start.getMonthOfYear() > month) {
                            year += 1;
                        }
                        finish = new DateTime(year, month, 1, 23, 59, 59, 59);
                        finish = finish.dayOfMonth().withMaximumValue();
                        start = new DateTime(year, month, finish.getDayOfMonth() - 10, 0, 0, 0, 0);
                        tc.addAttribute(TimexNames.value, ymFmt.print(finish));
                        return tc;
                    } else {
                        return null;
                    }

                }
            }

            else if (temp1.equals("this") || temp1.equals("today")) {
                tc.addAttribute(TimexNames.type, TimexNames.DATE);
                if (temp2.equals("century")) {

                    year = start.getCenturyOfEra();
                    year = year * 100;
                    start = new DateTime(year, 1, 1, 0, 0, 0, 0);
                    finish = new DateTime(year + 99, 12, 31, 23, 59, 59, 59);
                    tc.addAttribute(TimexNames.value, String.valueOf(finish.getCenturyOfEra()));
                    return tc;
                }

                else if (temp2.equals("decade")) {
                    year = start.getCenturyOfEra();
                    year = year * 100;
                    start = new DateTime(year, 1, 1, 0, 0, 0, 0);
                    finish = new DateTime(year + 9, 12, 31, 23, 59, 59, 59);
                    //interval = new Interval(start, finish);
                    tc.addAttribute(TimexNames.type, TimexNames.DATE);
                    tc.addAttribute(TimexNames.value, String.valueOf(finish.getCenturyOfEra() * 10));
                    return tc;
                }

                else if (temp2.equals("year")) {
                    year = start.getYear();
                    if (preflag == 1) {
                        finish = new DateTime(year, month, 1, 23, 59, 59, 59);
                        finish = finish.dayOfMonth().withMaximumValue();
                        start = new DateTime(year, month, 1, 0, 0, 0, 0);
                        tc.addAttribute(TimexNames.value, ymFmt.print(finish));
                        return tc;
                    }

                    else if (preflag == 2) {
                        start = new DateTime(year, 1, 1, 0, 0, 0, 0);
                        finish = new DateTime(year, 3, 31, 23, 59, 59, 59);
                        tc.addAttribute(TimexNames.value, yFmt.print(finish));
                        tc.addAttribute(TimexNames.mod, TimexNames.START);
                        return tc;
                    }

                    else if (preflag == 3) {
                        start = new DateTime(year, 10, 1, 0, 0, 0, 0);
                        finish = new DateTime(year, 12, 31, 23, 59, 59, 59);
                        tc.addAttribute(TimexNames.value, yFmt.print(finish));
                        tc.addAttribute(TimexNames.mod, TimexNames.END);
                        return tc;
                    } else {
                        start = new DateTime(year, 1, 1, 0, 0, 0, 0);
                        finish = new DateTime(year, 12, 31, 23, 59, 59, 59);
                        tc.addAttribute(TimexNames.value, yFmt.print(finish));
                        return tc;
                    }
                }

                else if (temp2.equals("month")) {
                    year = start.getYear();
                    month = start.getMonthOfYear();
                    finish = start.dayOfMonth().withMaximumValue();
                    day = finish.getDayOfMonth();
                    start = new DateTime(year, month, 1, 0, 0, 0, 0);
                    finish = new DateTime(year, month, day, 23, 59, 59, 59);
                    tc.addAttribute(TimexNames.value, ymFmt.print(finish));
                    if (preflag == 1) {
                        finish = new DateTime(year, month, prematchDay, 23, 59, 59, 59);
                        tc.addAttribute(TimexNames.value, fmt.print(finish));
                    } else if (preflag == 2) {
                        start = new DateTime(year, month, 1, 0, 0, 0, 0);
                        finish = new DateTime(year, month, 10, 23, 59, 59, 59);
                        tc.addAttribute(TimexNames.mod, TimexNames.START);
                        tc.addAttribute(TimexNames.value, ymFmt.print(finish));
                    }

                    else if (preflag == 3) {
                        start = new DateTime(year, month, day - 10, 0, 0, 0, 0);
                        finish = new DateTime(year, month, day, 23, 59, 59, 59);
                        tc.addAttribute(TimexNames.mod, TimexNames.END);
                        tc.addAttribute(TimexNames.value, ymFmt.print(finish));

                    }
                    return tc;
                }

                else if (temp2.equals("week")) {
                    dayweek = start.getDayOfWeek();
                    start = start.minusDays(dayweek - 1);
                    year = start.getYear();
                    month = start.getMonthOfYear();
                    day = start.getDayOfMonth();
                    start = new DateTime(year, month, day, 0, 0, 0, 0);
                    finish = start.minusDays(-6);
                    year = finish.getYear();
                    month = finish.getMonthOfYear();
                    day = finish.getDayOfMonth();
                    finish = new DateTime(year, month, day, 23, 59, 59, 59);
                    String weekIdx = String.valueOf(finish.getWeekOfWeekyear());
                    weekIdx = weekIdx.length() == 1 ? "0" + weekIdx : weekIdx;
                    tc.addAttribute(TimexNames.value, yFmt.print(finish) + "-W" + weekIdx);
                    if (preflag == 1) {
                        weekIdx = String.valueOf(finish.getWeekOfWeekyear());
                        weekIdx = weekIdx.length() == 1 ? "0" + weekIdx : weekIdx;
                        tc.addAttribute(TimexNames.value,
                                String.valueOf(year) + "-W" + weekIdx + "-" + String.valueOf(prematchDay));
                    } else if (preflag == 2) {
                        finish = start.minusDays(-2);
                        year = finish.getYear();
                        month = finish.getMonthOfYear();
                        day = finish.getDayOfMonth();
                        finish = new DateTime(year, month, day, 23, 59, 59, 59);
                        tc.addAttribute(TimexNames.mod, TimexNames.START);
                    }

                    else if (preflag == 3) {

                        start = start.minusDays(-4);
                        year = start.getYear();
                        month = start.getMonthOfYear();
                        day = start.getDayOfMonth();
                        start = new DateTime(year, month, day, 0, 0, 0, 0);
                        tc.addAttribute(TimexNames.mod, TimexNames.END);

                    }
                    return tc;
                }

                else if (temp2.equals("weekend")) {
                    dayweek = start.getDayOfWeek();
                    start = start.minusDays(dayweek - 6);
                    year = start.getYear();
                    month = start.getMonthOfYear();
                    day = start.getDayOfMonth();
                    start = new DateTime(year, month, day, 0, 0, 0, 0);
                    finish = start.minusDays(-1);
                    day = finish.getDayOfMonth();
                    finish = new DateTime(year, month, day, 23, 59, 59, 59);
                    String weekIdx = String.valueOf(finish.getWeekOfWeekyear());
                    weekIdx = weekIdx.length() == 1 ? "0" + weekIdx : weekIdx;
                    tc.addAttribute(TimexNames.value, String.valueOf(year) + "-W" + weekIdx + "-WE");
                    return tc;

                } else if (temp2.equals("mon") || temp2.equals("monday")) {

                    dayweek = start.getDayOfWeek();
                    start = start.minusDays(dayweek - 1);
                    day = start.getDayOfMonth();
                    year = start.getYear();
                    month = start.getMonthOfYear();
                    start = new DateTime(year, month, day, 0, 0, 0, 0);
                    finish = new DateTime(year, month, day, 23, 59, 59, 59);
                    String tense = temporalPhrase.getTense();
                    if (tense.equals("past") && dayweek < 1) {
                        finish = finish.minusDays(7);
                    } else if (!tense.equals("past") && dayweek > 1) {
                        finish = finish.minusDays(-7);
                    }
                    tc.addAttribute(TimexNames.value, fmt.print(finish));
                    if (preflag == 1) {
                        tc.addAttribute(TimexNames.value,
                                tc.getAttribute(TimexNames.value) + "T" + thisTimeOfDay);
                    }
                    return tc;
                }

                else if (temp2.equals("tues") || temp2.equals("tuesday")) {
                    dayweek = start.getDayOfWeek();
                    start = start.minusDays(dayweek - 2);
                    day = start.getDayOfMonth();
                    year = start.getYear();
                    month = start.getMonthOfYear();
                    start = new DateTime(year, month, day, 0, 0, 0, 0);
                    finish = new DateTime(year, month, day, 23, 59, 59, 59);
                    String tense = temporalPhrase.getTense();
                    if (tense.equals("past") && dayweek < 2) {
                        finish = finish.minusDays(7);
                    } else if (!tense.equals("past") && dayweek > 2) {
                        finish = finish.minusDays(-7);
                    }
                    tc.addAttribute(TimexNames.value, fmt.print(finish));
                    if (preflag == 1) {
                        tc.addAttribute(TimexNames.value,
                                tc.getAttribute(TimexNames.value) + "T" + thisTimeOfDay);
                    }
                    return tc;
                }

                else if (temp2.equals("wed") || temp2.equals("wednesday")) {
                    dayweek = start.getDayOfWeek();
                    start = start.minusDays(dayweek - 3);
                    day = start.getDayOfMonth();
                    year = start.getYear();
                    month = start.getMonthOfYear();
                    start = new DateTime(year, month, day, 0, 0, 0, 0);
                    finish = new DateTime(year, month, day, 23, 59, 59, 59);
                    String tense = temporalPhrase.getTense();
                    if (tense.equals("past") && dayweek < 3) {
                        finish = finish.minusDays(7);
                    } else if (!tense.equals("past") && dayweek > 3) {
                        finish = finish.minusDays(-7);
                    }
                    tc.addAttribute(TimexNames.value, fmt.print(finish));
                    if (preflag == 1) {
                        tc.addAttribute(TimexNames.value,
                                tc.getAttribute(TimexNames.value) + "T" + thisTimeOfDay);
                    }
                    return tc;
                }

                else if (temp2.equals("thur") || temp2.equals("thursday")) {
                    dayweek = start.getDayOfWeek();
                    start = start.minusDays(dayweek - 4);
                    day = start.getDayOfMonth();
                    year = start.getYear();
                    month = start.getMonthOfYear();
                    start = new DateTime(year, month, day, 0, 0, 0, 0);
                    finish = new DateTime(year, month, day, 23, 59, 59, 59);
                    String tense = temporalPhrase.getTense();
                    if (tense.equals("past") && dayweek < 4) {
                        finish = finish.minusDays(7);
                    } else if (!tense.equals("past") && dayweek > 4) {
                        finish = finish.minusDays(-7);
                    }
                    tc.addAttribute(TimexNames.value, fmt.print(finish));
                    if (preflag == 1) {
                        tc.addAttribute(TimexNames.value,
                                tc.getAttribute(TimexNames.value) + "T" + thisTimeOfDay);
                    }
                    return tc;
                }

                else if (temp2.equals("fri") || temp2.equals("friday")) {
                    dayweek = start.getDayOfWeek();
                    start = start.minusDays(dayweek - 5);
                    day = start.getDayOfMonth();
                    year = start.getYear();
                    month = start.getMonthOfYear();
                    start = new DateTime(year, month, day, 0, 0, 0, 0);
                    finish = new DateTime(year, month, day, 23, 59, 59, 59);
                    String tense = temporalPhrase.getTense();
                    if (tense.equals("past") && dayweek < 5) {
                        finish = finish.minusDays(7);
                    } else if (!tense.equals("past") && dayweek > 5) {
                        finish = finish.minusDays(-7);
                    }
                    tc.addAttribute(TimexNames.value, fmt.print(finish));
                    if (preflag == 1) {
                        tc.addAttribute(TimexNames.value,
                                tc.getAttribute(TimexNames.value) + "T" + thisTimeOfDay);
                    }
                    return tc;
                }

                else if (temp2.equals("sat") || temp2.equals("saturday")) {
                    dayweek = start.getDayOfWeek();
                    start = start.minusDays(dayweek - 6);
                    day = start.getDayOfMonth();
                    year = start.getYear();
                    month = start.getMonthOfYear();
                    start = new DateTime(year, month, day, 0, 0, 0, 0);
                    finish = new DateTime(year, month, day, 23, 59, 59, 59);
                    String tense = temporalPhrase.getTense();
                    if (tense.equals("past") && dayweek < 6) {
                        finish = finish.minusDays(7);
                    } else if (!tense.equals("past") && dayweek > 6) {
                        finish = finish.minusDays(-7);
                    }
                    tc.addAttribute(TimexNames.value, fmt.print(finish));
                    if (preflag == 1) {
                        tc.addAttribute(TimexNames.value,
                                tc.getAttribute(TimexNames.value) + "T" + thisTimeOfDay);
                    }
                    return tc;
                }

                else if (temp2.equals("sun") || temp2.equals("sunday")) {
                    dayweek = start.getDayOfWeek();
                    start = start.minusDays(dayweek - 7);
                    day = start.getDayOfMonth();
                    year = start.getYear();
                    month = start.getMonthOfYear();
                    start = new DateTime(year, month, day, 0, 0, 0, 0);
                    finish = new DateTime(year, month, day, 23, 59, 59, 59);
                    String tense = temporalPhrase.getTense();
                    if (tense.equals("past") && dayweek < 7) {
                        finish = finish.minusDays(7);
                    } else if (!tense.equals("past") && dayweek > 7) {
                        finish = finish.minusDays(-7);
                    }
                    tc.addAttribute(TimexNames.value, fmt.print(finish));
                    if (preflag == 1) {
                        tc.addAttribute(TimexNames.value,
                                tc.getAttribute(TimexNames.value) + "T" + thisTimeOfDay);
                    }
                    return tc;
                }

                else if (temp2.equals("morning")) {
                    year = start.getYear();
                    month = start.getMonthOfYear();
                    day = start.getDayOfMonth();
                    start = new DateTime(year, month, day, 7, 0, 0, 0);
                    finish = new DateTime(year, month, day, 10, 59, 59, 59);
                    tc.addAttribute(TimexNames.type, TimexNames.TIME);
                    tc.addAttribute(TimexNames.value, fmt.print(finish) + TimexNames.MORNING);
                    return tc;
                }

                else if (temp2.equals("noon")) {

                    year = start.getYear();
                    month = start.getMonthOfYear();
                    day = start.getDayOfMonth();
                    start = new DateTime(year, month, day, 11, 0, 0, 0);
                    finish = new DateTime(year, month, day, 13, 59, 59, 59);
                    tc.addAttribute(TimexNames.type, TimexNames.TIME);
                    tc.addAttribute(TimexNames.value, fmt.print(finish) + TimexNames.NOON);
                    return tc;
                }

                else if (temp2.equals("afternoon")) {

                    year = start.getYear();
                    month = start.getMonthOfYear();
                    day = start.getDayOfMonth();
                    start = new DateTime(year, month, day, 14, 0, 0, 0);
                    finish = new DateTime(year, month, day, 17, 59, 59, 59);
                    tc.addAttribute(TimexNames.type, TimexNames.TIME);
                    tc.addAttribute(TimexNames.value, fmt.print(finish) + TimexNames.AFTERNOON);
                    return tc;
                }

                else if (temp2.equals("evening")) {
                    year = start.getYear();
                    month = start.getMonthOfYear();
                    day = start.getDayOfMonth();
                    start = new DateTime(year, month, day, 18, 0, 0, 0);
                    finish = new DateTime(year, month, day, 20, 59, 59, 59);
                    tc.addAttribute(TimexNames.type, TimexNames.TIME);
                    tc.addAttribute(TimexNames.value, fmt.print(finish) + TimexNames.EVENING);
                    return tc;
                }

                else if (temp2.equals("night")) {
                    year = start.getYear();
                    month = start.getMonthOfYear();
                    day = start.getDayOfMonth();
                    start = new DateTime(year, month, day, 21, 0, 0, 0);
                    finish = new DateTime(year, month, day, 23, 59, 59, 59);
                    tc.addAttribute(TimexNames.type, TimexNames.TIME);
                    tc.addAttribute(TimexNames.value, fmt.print(finish) + TimexNames.NIGHT);
                    return tc;
                }

                else if (temp2.equals("spring")) {
                    year = start.getYear();
                    start = new DateTime(year, 3, 1, 0, 0, 0, 0);
                    finish = new DateTime(year, 5, 31, 23, 59, 59, 59);
                    tc.addAttribute(TimexNames.value, yFmt.print(finish) + "-" + TimexNames.SPRING);
                    return tc;
                }

                else if (temp2.equals("summer")) {
                    year = start.getYear();
                    start = new DateTime(year, 6, 1, 0, 0, 0, 0);
                    finish = new DateTime(year, 8, 31, 23, 59, 59, 59);
                    tc.addAttribute(TimexNames.value, yFmt.print(finish) + "-" + TimexNames.SUMMER);
                    return tc;
                }

                else if (temp2.equals("fall")) {
                    year = start.getYear();
                    start = new DateTime(year, 9, 1, 0, 0, 0, 0);
                    finish = new DateTime(year, 11, 30, 23, 59, 59, 59);
                    tc.addAttribute(TimexNames.value, yFmt.print(finish) + "-" + TimexNames.FALL);
                    return tc;
                }

                else if (temp2.equals("winter")) {
                    finish = start.minusDays(1);
                    year = finish.getYear();
                    start = new DateTime(year, 12, 1, 0, 0, 0, 0);
                    finish = new DateTime(year + 1, 2, 28, 23, 59, 59, 59);
                    tc.addAttribute(TimexNames.value, yFmt.print(finish) + "-" + TimexNames.WINTER);
                    return tc;
                }

                else {
                    String patternStr1 = monther;
                    Pattern pattern1 = Pattern.compile(patternStr1);
                    Matcher matcher1 = pattern1.matcher(temp2);
                    boolean matchFound1 = matcher1.find();
                    if (matchFound1) {
                        month = Integer.parseInt(temp.hm.get(temp2));
                        year = start.getYear();
                        int referenceMonth = start.getMonthOfYear();
                        finish = new DateTime(year, month, 1, 23, 59, 59, 59);
                        finish = finish.dayOfMonth().withMaximumValue();
                        start = new DateTime(year, month, 1, 0, 0, 0, 0);
                        String tense = temporalPhrase.getTense();
                        if (tense.equals("past") && referenceMonth < month) {
                            finish = finish.minusYears(1);
                        } else if (!tense.equals("past") && referenceMonth > month) {
                            finish = finish.minusYears(-1);
                        }
                        tc.addAttribute(TimexNames.value, ymFmt.print(finish));

                        if (preflag == 2) {
                            finish = new DateTime(year, month, 10, 23, 59, 59, 59);
                            start = new DateTime(year, month, 1, 0, 0, 0, 0);
                            tc.addAttribute(TimexNames.mod, TimexNames.START);
                        }

                        else if (preflag == 3) {
                            start = new DateTime(year, month, 20, 0, 0, 0, 0);
                            tc.addAttribute(TimexNames.mod, TimexNames.END);
                        }
                        return tc;
                    }

                    else {
                        return null;
                    }

                }
            }

            else if (temp1.equals("next") || temp1.equals("upcoming") || temp1.equals("following")
                    || temp1.equals("tomorrow")) {
                tc.addAttribute(TimexNames.type, TimexNames.DATE);
                if (temp2.equals("year")) {
                    finish = start.minusYears(-1);
                    year = finish.getYear();
                    if (preflag == 1) {
                        finish = new DateTime(year, month, 1, 23, 59, 59, 59);
                        finish = finish.dayOfMonth().withMaximumValue();
                        start = new DateTime(year, month, 1, 0, 0, 0, 0);
                        tc.addAttribute(TimexNames.value, ymFmt.print(finish));
                        return tc;
                    }

                    else if (preflag == 2) {
                        start = new DateTime(year, 1, 1, 0, 0, 0, 0);
                        finish = new DateTime(year, 3, 31, 23, 59, 59, 59);
                        tc.addAttribute(TimexNames.value, ymFmt.print(finish));
                        tc.addAttribute(TimexNames.mod, TimexNames.START);
                        return tc;

                    }

                    else if (preflag == 3) {
                        start = new DateTime(year, 10, 1, 0, 0, 0, 0);
                        finish = new DateTime(year, 12, 31, 23, 59, 59, 59);
                        tc.addAttribute(TimexNames.value, ymFmt.print(finish));
                        tc.addAttribute(TimexNames.mod, TimexNames.END);
                        return tc;
                    } else {
                        start = new DateTime(year, 1, 1, 0, 0, 0, 0);
                        finish = new DateTime(year, 12, 31, 23, 59, 59, 59);
                        tc.addAttribute(TimexNames.value, yFmt.print(finish));
                        return tc;
                    }
                }

                else if (temp2.equals("month")) {
                    finish = start.minusMonths(-1);
                    year = finish.getYear();
                    month = finish.getMonthOfYear();
                    finish = finish.dayOfMonth().withMaximumValue();
                    day = finish.getDayOfMonth();
                    start = new DateTime(year, month, 1, 0, 0, 0, 0);
                    finish = new DateTime(year, month, day, 23, 59, 59, 59);
                    tc.addAttribute(TimexNames.value, ymFmt.print(finish));
                    if (preflag == 1) {
                        finish = new DateTime(year, month, prematchDay, 23, 59, 59, 59);
                        tc.addAttribute(TimexNames.value, fmt.print(finish));
                    } else if (preflag == 2) {
                        start = new DateTime(year, month, 1, 0, 0, 0, 0);
                        finish = new DateTime(year, month, 10, 23, 59, 59, 59);
                        tc.addAttribute(TimexNames.mod, TimexNames.START);
                    }

                    else if (preflag == 3) {
                        start = new DateTime(year, month, day - 10, 0, 0, 0, 0);
                        finish = new DateTime(year, month, day, 23, 59, 59, 59);
                        tc.addAttribute(TimexNames.mod, TimexNames.END);
                    }
                    return tc;
                }

                else if (temp2.equals("week")) {
                    finish = start.minusWeeks(-1);
                    dayweek = finish.getDayOfWeek();
                    finish = finish.minusDays(dayweek - 1);
                    year = finish.getYear();
                    month = finish.getMonthOfYear();
                    day = finish.getDayOfMonth();
                    start = new DateTime(year, month, day, 0, 0, 0, 0);
                    finish = start.minusDays(-6);
                    year = finish.getYear();
                    month = finish.getMonthOfYear();
                    day = finish.getDayOfMonth();
                    finish = new DateTime(year, month, day, 23, 59, 59, 59);
                    String weekIdx = String.valueOf(finish.getWeekOfWeekyear());
                    weekIdx = weekIdx.length() == 1 ? "0" + weekIdx : weekIdx;
                    tc.addAttribute(TimexNames.value, String.valueOf(year) + "-W" + weekIdx);
                    if (preflag == 1) {
                        weekIdx = String.valueOf(finish.getWeekOfWeekyear());
                        weekIdx = weekIdx.length() == 1 ? "0" + weekIdx : weekIdx;
                        tc.addAttribute(TimexNames.value,
                                String.valueOf(year) + "-W" + weekIdx + "-" + String.valueOf(prematchDay));
                    } else if (preflag == 2) {
                        finish = start.minusDays(-2);
                        year = finish.getYear();
                        month = finish.getMonthOfYear();
                        day = finish.getDayOfMonth();
                        finish = new DateTime(year, month, day, 23, 59, 59, 59);
                        tc.addAttribute(TimexNames.mod, TimexNames.START);
                    }

                    else if (preflag == 3) {

                        start = start.minusDays(-4);
                        year = start.getYear();
                        month = start.getMonthOfYear();
                        day = start.getDayOfMonth();
                        start = new DateTime(year, month, day, 0, 0, 0, 0);
                        tc.addAttribute(TimexNames.mod, TimexNames.END);

                    }

                    return tc;
                }

                else if (temp2.equals("weekend")) {
                    dayweek = start.getDayOfWeek();
                    finish = start.minusDays(dayweek - 13);
                    year = finish.getYear();
                    month = finish.getMonthOfYear();
                    day = finish.getDayOfMonth();
                    start = new DateTime(year, month, day, 0, 0, 0, 0);
                    finish = start.minusDays(-1);
                    day = finish.getDayOfMonth();
                    finish = new DateTime(year, month, day, 23, 59, 59, 59);
                    String weekIdx = String.valueOf(finish.getWeekOfWeekyear());
                    weekIdx = weekIdx.length() == 1 ? "0" + weekIdx : weekIdx;
                    tc.addAttribute(TimexNames.value, String.valueOf(year) + "-W" + weekIdx + "-WE");
                    return tc;
                } else if (temp2.equals("hour")) {
                    finish = start.minusHours(-1);
                    tc.addAttribute(TimexNames.value, TimexNames.FUTURE_REF);
                    return tc;
                }

                else if (temp2.equals("minute")) {
                    finish = start.minusMinutes(-1);
                    tc.addAttribute(TimexNames.value, TimexNames.FUTURE_REF);
                    return tc;
                }

                else if (temp2.equals("second")) {
                    finish = start.minusSeconds(-1);
                    tc.addAttribute(TimexNames.value, TimexNames.FUTURE_REF);
                    return tc;
                }

                else if (temp2.equals("century")) {
                    finish = start.minusYears(-100);
                    year = finish.getCenturyOfEra();
                    year = year * 100;
                    start = new DateTime(year, 1, 1, 0, 0, 0, 0);
                    finish = new DateTime(year + 99, 12, 31, 23, 59, 59, 59);
                    tc.addAttribute(TimexNames.value, String.valueOf(finish.getCenturyOfEra()));
                    return tc;
                } else if (temp2.equals("decade")) {
                    finish = start.minusYears(-10);
                    year = finish.getCenturyOfEra();
                    year = year * 100;
                    start = new DateTime(year, 1, 1, 0, 0, 0, 0);
                    finish = new DateTime(year + 9, 12, 31, 23, 59, 59, 59);
                    tc.addAttribute(TimexNames.type, TimexNames.DATE);
                    tc.addAttribute(TimexNames.value, String.valueOf(finish.getCenturyOfEra() * 10));
                    return tc;
                } else if (temp2.equals("day")) {
                    finish = start.minusDays(-1);
                    year = finish.getYear();
                    month = finish.getMonthOfYear();
                    day = finish.getDayOfMonth();
                    start = new DateTime(year, month, day, 0, 0, 0, 0);
                    finish = new DateTime(year, month, day, 23, 59, 59, 59);
                    tc.addAttribute(TimexNames.value, fmt.print(finish));
                    return tc;
                }

                else if (temp2.equals("mon") || temp2.equals("monday")) {
                    dayweek = start.getDayOfWeek();
                    finish = start.minusDays(dayweek - 8);
                    year = finish.getYear();
                    month = finish.getMonthOfYear();
                    day = finish.getDayOfMonth();
                    start = new DateTime(year, month, day, 0, 0, 0, 0);
                    finish = new DateTime(year, month, day, 23, 59, 59, 59);
                    tc.addAttribute(TimexNames.value, fmt.print(finish));
                    if (preflag == 1) {
                        tc.addAttribute(TimexNames.value,
                                tc.getAttribute(TimexNames.value) + "T" + thisTimeOfDay);
                    }
                    return tc;
                }

                else if (temp2.equals("tues") || temp2.equals("tuesday")) {
                    dayweek = start.getDayOfWeek();
                    finish = start.minusDays(dayweek - 9);
                    year = finish.getYear();
                    month = finish.getMonthOfYear();
                    day = finish.getDayOfMonth();
                    start = new DateTime(year, month, day, 0, 0, 0, 0);
                    finish = new DateTime(year, month, day, 23, 59, 59, 59);
                    tc.addAttribute(TimexNames.value, fmt.print(finish));
                    if (preflag == 1) {
                        tc.addAttribute(TimexNames.value,
                                tc.getAttribute(TimexNames.value) + "T" + thisTimeOfDay);
                    }
                    return tc;
                }

                else if (temp2.equals("wed") || temp2.equals("wednesday")) {
                    dayweek = start.getDayOfWeek();
                    finish = start.minusDays(dayweek - 10);
                    year = finish.getYear();
                    month = finish.getMonthOfYear();
                    day = finish.getDayOfMonth();
                    start = new DateTime(year, month, day, 0, 0, 0, 0);
                    finish = new DateTime(year, month, day, 23, 59, 59, 59);
                    tc.addAttribute(TimexNames.value, fmt.print(finish));
                    if (preflag == 1) {
                        tc.addAttribute(TimexNames.value,
                                tc.getAttribute(TimexNames.value) + "T" + thisTimeOfDay);
                    }
                    return tc;
                }

                else if (temp2.equals("thur") || temp2.equals("thursday")) {
                    dayweek = start.getDayOfWeek();
                    finish = start.minusDays(dayweek - 11);
                    year = finish.getYear();
                    month = finish.getMonthOfYear();
                    day = finish.getDayOfMonth();
                    start = new DateTime(year, month, day, 0, 0, 0, 0);
                    finish = new DateTime(year, month, day, 23, 59, 59, 59);
                    tc.addAttribute(TimexNames.value, fmt.print(finish));
                    if (preflag == 1) {
                        tc.addAttribute(TimexNames.value,
                                tc.getAttribute(TimexNames.value) + "T" + thisTimeOfDay);
                    }
                    return tc;
                }

                else if (temp2.equals("fri") || temp2.equals("friday")) {
                    dayweek = start.getDayOfWeek();
                    finish = start.minusDays(dayweek - 12);
                    year = finish.getYear();
                    month = finish.getMonthOfYear();
                    day = finish.getDayOfMonth();
                    start = new DateTime(year, month, day, 0, 0, 0, 0);
                    finish = new DateTime(year, month, day, 23, 59, 59, 59);
                    tc.addAttribute(TimexNames.value, fmt.print(finish));
                    if (preflag == 1) {
                        tc.addAttribute(TimexNames.value,
                                tc.getAttribute(TimexNames.value) + "T" + thisTimeOfDay);
                    }
                    return tc;
                }

                else if (temp2.equals("sat") || temp2.equals("saturday")) {
                    dayweek = start.getDayOfWeek();
                    finish = start.minusDays(dayweek - 13);
                    year = finish.getYear();
                    month = finish.getMonthOfYear();
                    day = finish.getDayOfMonth();
                    start = new DateTime(year, month, day, 0, 0, 0, 0);
                    finish = new DateTime(year, month, day, 23, 59, 59, 59);
                    tc.addAttribute(TimexNames.value, fmt.print(finish));
                    if (preflag == 1) {
                        tc.addAttribute(TimexNames.value,
                                tc.getAttribute(TimexNames.value) + "T" + thisTimeOfDay);
                    }
                    return tc;
                }

                else if (temp2.equals("sun") || temp2.equals("sunday")) {
                    dayweek = start.getDayOfWeek();
                    finish = start.minusDays(dayweek - 14);
                    year = finish.getYear();
                    month = finish.getMonthOfYear();
                    day = finish.getDayOfMonth();
                    start = new DateTime(year, month, day, 0, 0, 0, 0);
                    finish = new DateTime(year, month, day, 23, 59, 59, 59);
                    tc.addAttribute(TimexNames.value, fmt.print(finish));
                    if (preflag == 1) {
                        tc.addAttribute(TimexNames.value,
                                tc.getAttribute(TimexNames.value) + "T" + thisTimeOfDay);
                    }
                    return tc;
                }

                else if (temp2.equals("morning")) {
                    finish = start.minusDays(-1);
                    year = finish.getYear();
                    month = finish.getMonthOfYear();
                    day = finish.getDayOfMonth();
                    start = new DateTime(year, month, day, 7, 0, 0, 0);
                    finish = new DateTime(year, month, day, 10, 59, 59, 59);
                    tc.addAttribute(TimexNames.type, TimexNames.TIME);
                    tc.addAttribute(TimexNames.value, fmt.print(finish) + TimexNames.MORNING);
                    return tc;
                }

                else if (temp2.equals("noon")) {
                    finish = start.minusDays(-1);
                    year = finish.getYear();
                    month = finish.getMonthOfYear();
                    day = finish.getDayOfMonth();
                    start = new DateTime(year, month, day, 11, 0, 0, 0);
                    finish = new DateTime(year, month, day, 13, 59, 59, 59);
                    tc.addAttribute(TimexNames.type, TimexNames.TIME);
                    tc.addAttribute(TimexNames.value, fmt.print(finish) + TimexNames.NOON);
                    return tc;
                }

                else if (temp2.equals("afternoon")) {
                    finish = start.minusDays(-1);
                    year = finish.getYear();
                    month = finish.getMonthOfYear();
                    day = finish.getDayOfMonth();
                    start = new DateTime(year, month, day, 14, 0, 0, 0);
                    finish = new DateTime(year, month, day, 17, 59, 59, 59);
                    tc.addAttribute(TimexNames.type, TimexNames.TIME);
                    tc.addAttribute(TimexNames.value, fmt.print(finish) + TimexNames.AFTERNOON);
                    return tc;
                }

                else if (temp2.equals("evening")) {
                    finish = start.minusDays(-1);
                    year = finish.getYear();
                    month = finish.getMonthOfYear();
                    day = finish.getDayOfMonth();
                    start = new DateTime(year, month, day, 18, 0, 0, 0);
                    finish = new DateTime(year, month, day, 20, 59, 59, 59);
                    tc.addAttribute(TimexNames.type, TimexNames.TIME);
                    tc.addAttribute(TimexNames.value, fmt.print(finish) + TimexNames.EVENING);
                    return tc;
                }

                else if (temp2.equals("night")) {
                    finish = start.minusDays(-1);
                    year = finish.getYear();
                    month = finish.getMonthOfYear();
                    day = finish.getDayOfMonth();
                    start = new DateTime(year, month, day, 21, 0, 0, 0);
                    finish = new DateTime(year, month, day, 23, 59, 59, 59);
                    tc.addAttribute(TimexNames.type, TimexNames.TIME);
                    tc.addAttribute(TimexNames.value, fmt.print(finish) + TimexNames.NIGHT);
                    return tc;
                }

                else if (temp2.equals("spring")) {
                    finish = start.minusYears(-1);
                    year = finish.getYear();
                    start = new DateTime(year, 3, 1, 0, 0, 0, 0);
                    finish = new DateTime(year, 5, 31, 23, 59, 59, 59);
                    tc.addAttribute(TimexNames.value, fmt.print(finish) + "-" + TimexNames.SPRING);
                    return tc;
                }

                else if (temp2.equals("summer")) {
                    finish = start.minusYears(-1);
                    year = finish.getYear();
                    start = new DateTime(year, 6, 1, 0, 0, 0, 0);
                    finish = new DateTime(year, 8, 31, 23, 59, 59, 59);
                    tc.addAttribute(TimexNames.value, fmt.print(finish) + "-" + TimexNames.MORNING);
                    return tc;
                }

                else if (temp2.equals("fall")) {
                    finish = start.minusYears(-1);
                    year = finish.getYear();
                    start = new DateTime(year, 9, 1, 0, 0, 0, 0);
                    finish = new DateTime(year, 11, 30, 23, 59, 59, 59);
                    tc.addAttribute(TimexNames.value, fmt.print(finish) + "-" + TimexNames.FALL);
                    return tc;
                }

                else if (temp2.equals("winter")) {
                    year = start.getYear();
                    start = new DateTime(year, 12, 1, 0, 0, 0, 0);
                    finish = new DateTime(year + 1, 2, 28, 23, 59, 59, 59);
                    tc.addAttribute(TimexNames.value, fmt.print(finish) + "-" + TimexNames.WINTER);
                    return tc;
                }

                else {
                    String patternStr1 = monther;
                    Pattern pattern1 = Pattern.compile(patternStr1);
                    Matcher matcher1 = pattern1.matcher(temp2);
                    boolean matchFound1 = matcher1.find();
                    if (matchFound1) {
                        month = Integer.parseInt(temp.hm.get(temp2));
                        finish = start.minusYears(-1);
                        year = finish.getYear();
                        finish = new DateTime(year, month, 1, 23, 59, 59, 59);
                        finish = finish.dayOfMonth().withMaximumValue();
                        start = new DateTime(year, month, 1, 0, 0, 0, 0);
                        tc.addAttribute(TimexNames.value, ymFmt.print(finish));

                        if (preflag == 2) {
                            finish = new DateTime(year, month, 10, 23, 59, 59, 59);
                            start = new DateTime(year, month, 1, 0, 0, 0, 0);
                            tc.addAttribute(TimexNames.mod, TimexNames.START);
                        }

                        else if (preflag == 3) {
                            start = new DateTime(year, month, 20, 0, 0, 0, 0);
                            tc.addAttribute(TimexNames.mod, TimexNames.END);
                        }
                        return tc;
                    }

                    else {
                        return null;
                    }

                }

            }

        }

    }
    return null;

}

From source file:edu.illinois.cs.cogcomp.temporal.normalizer.main.timex2interval.RelativeDate.java

License:Open Source License

/**
 * This function converts phrase that contains a relative date: more than xxx, etc
 * @param start anchor time//from   w ww .  j av a 2 s .  co  m
 * @param phrase
  * @return
  */
public static TimexChunk Relativerule(DateTime start, String phrase) {
    int numterm;
    int flag_ago = 0;
    int i;
    int year;
    int month;
    int day;
    DateTime finish;
    String temp1;
    String temp2;
    String temp3;
    int amount;
    Interval interval;
    interval = new Interval(start, start);
    phrase = phrase.toLowerCase();
    phrase = phrase.trim();
    TimexChunk tc = new TimexChunk();

    if (phrase.equals("recently") || phrase.equals("recent") || phrase.equals("past")
            || phrase.equals("at time") || phrase.equals("previously")) {
        tc.addAttribute(TimexNames.type, TimexNames.DATE);
        tc.addAttribute(TimexNames.value, TimexNames.PAST_REF);
        return tc;
    }

    if (phrase.contains("future")) {
        tc.addAttribute(TimexNames.type, TimexNames.DATE);
        tc.addAttribute(TimexNames.value, TimexNames.FUTURE_REF);
        return tc;
    }

    // Handle some special cases
    if (phrase.endsWith("earlier")) {
        phrase = phrase.replace("earlier", "ago");
        phrase = phrase.trim();
    }

    if (phrase.contains("ago")) {
        phrase = phrase.replaceAll("ago", "");
        phrase = "last " + phrase;
        flag_ago = 1;
    }

    if (phrase.contains("later")) {
        phrase = phrase.replaceAll("later", "");
        phrase = "after " + phrase;
    }

    if (phrase.contains("after")) {
        phrase = phrase.replaceAll("after", "");
        phrase = "after " + phrase;
    }

    if (phrase.contains("more than")) {
        phrase = phrase.replaceAll("more than", "after");
    }

    if (phrase.contains("less than")) {
        phrase = phrase.replaceAll("less than", "in");
    }
    if (phrase.contains("last decade")) {
        phrase = phrase.replaceAll("last decade", "last ten years");
    }

    if (phrase.contains("next decade")) {
        phrase = phrase.replaceAll("next decade", "next ten years");

    }

    String patternStr = "\\s*(" + positionTerm + "|" + shiftIndicator + ")\\s*((?:\\d{1,4}|" + number
            + ")\\s*(?:" + number + ")?)\\s*(" + dateUnit + "|" + timeUnit + ")\\s*\\w*";

    Pattern pattern = Pattern.compile(patternStr);
    Matcher matcher = pattern.matcher(phrase);
    boolean matchFound = matcher.find();
    DateTimeFormatter fmt = DateTimeFormat.forPattern("yyyy-MM-dd");
    DateTimeFormatter ymFmt = DateTimeFormat.forPattern("yyyy-MM");
    DateTimeFormatter yFmt = DateTimeFormat.forPattern("yyyy");
    if (matchFound) {
        for (i = 1; i <= 3; i++) {
            if (matcher.group(i) == null) {
                i--;
                break;
            }
        }
        if (i == 4) {
            i--;
        }
        numterm = i;
        if (numterm == 3) {

            temp1 = matcher.group(1);
            temp2 = matcher.group(2);
            temp3 = matcher.group(3);
            amount = Integer.parseInt(converter(temp2));
            if (temp1.equals("last") || temp1.equals("past") || temp1.equals("previous")
                    || temp1.equals("since") || temp1.equals("this") || temp1.equals("recent")) {
                if (flag_ago == 0) {
                    if (temp3.equals("years") || temp3.equals("year")) {
                        finish = start.minusYears(amount);
                        year = finish.getYear();
                        month = finish.getMonthOfYear();
                        day = finish.getDayOfMonth();
                        finish = new DateTime(start.getYear(), start.getMonthOfYear(), start.getDayOfMonth(), 0,
                                0, 0, 0);
                        start = new DateTime(year, month, day, 0, 0, 0, 0);
                        tc.addAttribute(TimexNames.type, TimexNames.DURATION);
                        tc.addAttribute(TimexNames.value, "P" + amount + "Y");
                        return tc;
                    }

                    else if (temp3.equals("day") || temp3.equals("days")) {
                        finish = start.minusDays(amount);
                        year = finish.getYear();
                        month = finish.getMonthOfYear();
                        day = finish.getDayOfMonth();
                        finish = new DateTime(start.getYear(), start.getMonthOfYear(), start.getDayOfMonth(), 0,
                                0, 0, 0);
                        start = new DateTime(year, month, day, 0, 0, 0, 0);
                        tc.addAttribute(TimexNames.type, TimexNames.DURATION);
                        tc.addAttribute(TimexNames.value, "P" + amount + "D");
                        return tc;

                    }

                    else if (temp3.equals("month") || temp3.equals("months")) {
                        finish = start.minusMonths(amount);
                        year = start.getYear();
                        month = start.getMonthOfYear();
                        day = start.getDayOfMonth();
                        start = new DateTime(finish.getYear(), finish.getMonthOfYear(), finish.getDayOfMonth(),
                                0, 0, 0, 0);
                        finish = new DateTime(year, month, day, 0, 0, 0, 0);
                        tc.addAttribute(TimexNames.type, TimexNames.DURATION);
                        tc.addAttribute(TimexNames.value, "P" + amount + "M");
                        return tc;
                    }

                    else if (temp3.equals("week") || temp3.equals("weeks")) {
                        finish = start.minusWeeks(amount);
                        year = start.getYear();
                        month = start.getMonthOfYear();
                        day = start.getDayOfMonth();
                        start = new DateTime(finish.getYear(), finish.getMonthOfYear(), finish.getDayOfMonth(),
                                0, 0, 0, 0);
                        finish = new DateTime(year, month, day, 0, 0, 0, 0);
                        tc.addAttribute(TimexNames.type, TimexNames.DURATION);
                        tc.addAttribute(TimexNames.value, "P" + amount + "W");
                        return tc;
                    }

                    else if (temp3.equals("decade") || temp3.equals("decades")) {

                        finish = start.minusYears(amount * 10);
                        year = start.getYear();
                        month = start.getMonthOfYear();
                        day = start.getDayOfMonth();
                        start = new DateTime(finish.getYear(), finish.getMonthOfYear(), finish.getDayOfMonth(),
                                0, 0, 0, 0);
                        finish = new DateTime(year, month, day, 0, 0, 0, 0);
                        tc.addAttribute(TimexNames.type, TimexNames.DURATION);
                        tc.addAttribute(TimexNames.value, "P" + amount + "DE");
                        return tc;
                    }

                    else if (temp3.equals("century") || temp3.equals("centuries")) {
                        finish = start.minusYears(amount * 100);
                        year = start.getYear();
                        month = start.getMonthOfYear();
                        day = start.getDayOfMonth();
                        start = new DateTime(finish.getYear(), finish.getMonthOfYear(), finish.getDayOfMonth(),
                                0, 0, 0, 0);
                        finish = new DateTime(year, month, day, 0, 0, 0, 0);
                        tc.addAttribute(TimexNames.type, TimexNames.DURATION);
                        tc.addAttribute(TimexNames.value, "P" + amount + "CE");
                        return tc;
                    }

                    else if (temp3.equals("hour") || temp3.equals("hours")) {
                        finish = start.minusHours(amount);
                        tc.addAttribute(TimexNames.type, TimexNames.DURATION);
                        tc.addAttribute(TimexNames.value, "PT" + amount + "H");
                        return tc;
                    }

                    else if (temp3.equals("minute") || temp3.equals("minutes")) {
                        finish = start.minusMinutes(amount);
                        tc.addAttribute(TimexNames.type, TimexNames.DURATION);
                        tc.addAttribute(TimexNames.value, "PT" + amount + "M");
                        return tc;
                    }

                    else if (temp3.equals("second") || temp3.equals("seconds")) {
                        finish = start.minusSeconds(amount);
                        tc.addAttribute(TimexNames.type, TimexNames.DURATION);
                        tc.addAttribute(TimexNames.value, "PT" + amount + "S");
                        return tc;
                    }

                }

                else {
                    flag_ago = 0;
                    if (temp3.equals("years") || temp3.equals("year")) {
                        finish = start.minusYears(amount);
                        year = finish.getYear();
                        month = finish.getMonthOfYear();
                        day = finish.getDayOfMonth();
                        start = new DateTime(year, 1, 1, 0, 0, 0, 0);
                        finish = new DateTime(year, 12, 31, 23, 59, 59, 59);
                        tc.addAttribute(TimexNames.type, TimexNames.DATE);
                        tc.addAttribute(TimexNames.value, yFmt.print(finish));
                        return tc;
                    }

                    else if (temp3.equals("day") || temp3.equals("days")) {
                        finish = start.minusDays(amount);
                        year = finish.getYear();
                        month = finish.getMonthOfYear();
                        day = finish.getDayOfMonth();
                        finish = new DateTime(year, month, day, 23, 59, 59, 59);
                        start = new DateTime(year, month, day, 0, 0, 0, 0);
                        tc.addAttribute(TimexNames.type, TimexNames.DATE);
                        tc.addAttribute(TimexNames.value, fmt.print(finish));
                        return tc;

                    }

                    else if (temp3.equals("month") || temp3.equals("months")) {
                        finish = start.minusMonths(amount);
                        year = finish.getYear();
                        month = finish.getMonthOfYear();
                        day = finish.dayOfMonth().getMaximumValue();
                        start = new DateTime(year, month, 1, 0, 0, 0, 0);
                        finish = new DateTime(year, month, day, 23, 59, 59, 59);
                        tc.addAttribute(TimexNames.type, TimexNames.DATE);
                        tc.addAttribute(TimexNames.value, ymFmt.print(finish));
                        return tc;
                    }

                    else if (temp3.equals("week") || temp3.equals("weeks")) {
                        finish = start.minusWeeks(amount);
                        start = finish.minusWeeks(amount + 1);
                        year = start.getYear();
                        month = start.getMonthOfYear();
                        day = start.getDayOfMonth();
                        finish = new DateTime(finish.getYear(), finish.getMonthOfYear(), finish.getDayOfMonth(),
                                23, 59, 59, 59);
                        start = new DateTime(year, month, day, 0, 0, 0, 0);
                        tc.addAttribute(TimexNames.type, TimexNames.DATE);
                        tc.addAttribute(TimexNames.value,
                                yFmt.print(finish) + "-W" + String.valueOf(finish.getWeekOfWeekyear()));
                        return tc;
                    }

                    else if (temp3.equals("decade") || temp3.equals("decades")) {

                        finish = start.minusYears(amount * 10);
                        year = finish.getYear();
                        month = finish.getMonthOfYear();
                        day = finish.getDayOfMonth();
                        start = new DateTime(year, 1, 1, 0, 0, 0, 0);
                        finish = new DateTime(year, 12, 31, 23, 59, 59, 59);
                        tc.addAttribute(TimexNames.type, TimexNames.DATE);
                        tc.addAttribute(TimexNames.value, String.valueOf(finish.getYear() / 10) + "X");
                        return tc;
                    }

                    else if (temp3.equals("century") || temp3.equals("centuries")) {
                        finish = start.minusYears(amount * 100);
                        year = finish.getYear();
                        month = start.getMonthOfYear();
                        day = start.getDayOfMonth();
                        start = new DateTime(year, 1, 1, 0, 0, 0, 0);
                        finish = new DateTime(year, 12, 31, 23, 59, 59, 59);
                        tc.addAttribute(TimexNames.type, TimexNames.DATE);
                        tc.addAttribute(TimexNames.value, String.valueOf(finish.getCenturyOfEra()));
                        return tc;
                    }

                    else if (temp3.equals("hour") || temp3.equals("hours")) {
                        finish = start.minusHours(amount);
                        start = new DateTime(finish.getYear(), finish.getMonthOfYear(), finish.getDayOfMonth(),
                                finish.getHourOfDay(), 0, 0, 0);
                        finish = new DateTime(finish.getYear(), finish.getMonthOfYear(), finish.getDayOfMonth(),
                                finish.getHourOfDay(), 59, 59, 59);
                        tc.addAttribute(TimexNames.type, TimexNames.DURATION);
                        tc.addAttribute(TimexNames.value, "PT" + amount + "H");
                        return tc;
                    }

                    else if (temp3.equals("minute") || temp3.equals("minutes")) {
                        finish = start.minusMinutes(amount);
                        start = new DateTime(finish.getYear(), finish.getMonthOfYear(), finish.getDayOfMonth(),
                                finish.getHourOfDay(), finish.minuteOfHour().get(), 0, 0);
                        finish = new DateTime(finish.getYear(), finish.getMonthOfYear(), finish.getDayOfMonth(),
                                finish.getHourOfDay(), finish.minuteOfHour().get(), 59, 59);
                        tc.addAttribute(TimexNames.type, TimexNames.DURATION);
                        tc.addAttribute(TimexNames.value, "PT" + amount + "M");
                        return tc;
                    }

                }

            }

            else if (temp1.equals("in") || temp1.equals("upcoming") || temp1.equals("next")
                    || temp1.equals("from") || temp1.equals("following") || temp1.equals("during")
                    || temp1.equals("additional")) {
                if (temp3.equals("years") || temp3.equals("year")) {
                    finish = start.minusYears((-1) * amount);
                    year = finish.getYear();
                    month = finish.getMonthOfYear();
                    day = finish.getDayOfMonth();
                    finish = new DateTime(start.getYear(), start.getMonthOfYear(), start.getDayOfMonth(), 23,
                            59, 59, 59);
                    start = new DateTime(year, month, day, 23, 59, 59, 59);
                    interval = new Interval(finish, start);
                    tc.addAttribute(TimexNames.type, TimexNames.DURATION);
                    tc.addAttribute(TimexNames.value, "P" + amount + "Y");
                    return tc;
                }

                else if (temp3.equals("day") || temp3.equals("days")) {
                    finish = start.minusDays((-1) * amount);
                    year = finish.getYear();
                    month = finish.getMonthOfYear();
                    day = finish.getDayOfMonth();
                    finish = new DateTime(start.getYear(), start.getMonthOfYear(), start.getDayOfMonth(), 23,
                            59, 59, 59);
                    start = new DateTime(year, month, day, 23, 59, 59, 59);
                    tc.addAttribute(TimexNames.type, TimexNames.DURATION);
                    tc.addAttribute(TimexNames.value, "P" + amount + "D");
                    return tc;

                }

                else if (temp3.equals("month") || temp3.equals("months")) {
                    finish = start.minusMonths((-1) * amount);
                    year = start.getYear();
                    month = start.getMonthOfYear();
                    day = start.getDayOfMonth();
                    start = new DateTime(finish.getYear(), finish.getMonthOfYear(), finish.getDayOfMonth(), 23,
                            59, 59, 59);
                    finish = new DateTime(year, month, day, 23, 59, 59, 59);
                    tc.addAttribute(TimexNames.type, TimexNames.DURATION);
                    tc.addAttribute(TimexNames.value, "P" + amount + "M");
                    return tc;
                }

                else if (temp3.equals("week") || temp3.equals("weeks")) {
                    finish = start.minusWeeks((-1) * amount);
                    year = start.getYear();
                    month = start.getMonthOfYear();
                    day = start.getDayOfMonth();
                    start = new DateTime(finish.getYear(), finish.getMonthOfYear(), finish.getDayOfMonth(), 23,
                            59, 59, 59);
                    finish = new DateTime(year, month, day, 23, 59, 59, 59);
                    tc.addAttribute(TimexNames.type, TimexNames.DURATION);
                    tc.addAttribute(TimexNames.value, "P" + amount + "W");
                    return tc;
                }

                else if (temp3.equals("decade") || temp3.equals("decades")) {
                    finish = start.minusYears((-1) * amount * 10);
                    year = start.getYear();
                    month = start.getMonthOfYear();
                    day = start.getDayOfMonth();
                    start = new DateTime(finish.getYear(), finish.getMonthOfYear(), finish.getDayOfMonth(), 23,
                            59, 59, 59);
                    finish = new DateTime(year, month, day, 23, 59, 59, 59);
                    tc.addAttribute(TimexNames.type, TimexNames.DURATION);
                    amount = amount * 10;
                    tc.addAttribute(TimexNames.value, "P" + amount + "Y");
                    return tc;
                }

                else if (temp3.equals("century") || temp3.equals("centuries")) {
                    finish = start.minusYears((-1) * amount * 100);
                    year = start.getYear();
                    month = start.getMonthOfYear();
                    day = start.getDayOfMonth();
                    start = new DateTime(finish.getYear(), finish.getMonthOfYear(), finish.getDayOfMonth(), 23,
                            59, 59, 59);
                    finish = new DateTime(year, month, day, 23, 59, 59, 59);
                    tc.addAttribute(TimexNames.type, TimexNames.DURATION);
                    amount *= 100;
                    tc.addAttribute(TimexNames.value, "P" + amount + "Y");
                    return tc;
                }

                else if (temp3.equals("hour") || temp3.equals("hours")) {
                    finish = start.minusHours((-1) * amount);
                    tc.addAttribute(TimexNames.type, TimexNames.DURATION);
                    tc.addAttribute(TimexNames.value, "PT" + amount + "H");
                    return tc;
                }

                else if (temp3.equals("minute") || temp3.equals("minutes")) {
                    finish = start.minusMinutes((-1) * amount);
                    tc.addAttribute(TimexNames.type, TimexNames.DURATION);
                    tc.addAttribute(TimexNames.value, "PT" + amount + "M");
                    return tc;
                }

                else if (temp3.equals("second") || temp3.equals("seconds")) {
                    finish = start.minusSeconds((-1) * amount);
                    tc.addAttribute(TimexNames.type, TimexNames.DURATION);
                    tc.addAttribute(TimexNames.value, "PT" + amount + "S");
                    return tc;
                }

            }

            else if (temp1.equals("before") || temp1.equals("prior to") || temp1.equals("preceding")) {
                if (temp3.equals("years") || temp3.equals("year")) {
                    finish = start.minusYears(amount);
                    finish = finish.minusDays(1);
                    year = finish.getYear();
                    month = finish.getMonthOfYear();
                    day = finish.getDayOfMonth();
                    start = new DateTime(0000, 1, 1, 0, 0, 0, 0);
                    finish = new DateTime(year, month, day, 23, 59, 59, 59);
                    tc.addAttribute(TimexNames.type, TimexNames.DURATION);
                    tc.addAttribute(TimexNames.value, "P" + amount + "Y");
                    return tc;
                }

                else if (temp3.equals("day") || temp3.equals("days")) {

                    finish = start.minusDays(amount);
                    finish = finish.minusDays(1);
                    year = finish.getYear();
                    month = finish.getMonthOfYear();
                    day = finish.getDayOfMonth();
                    start = new DateTime(0000, 1, 1, 0, 0, 0, 0);
                    finish = new DateTime(year, month, day, 23, 59, 59, 59);
                    tc.addAttribute(TimexNames.type, TimexNames.DURATION);
                    tc.addAttribute(TimexNames.value, "P" + amount + "D");
                    return tc;

                }

                else if (temp3.equals("month") || temp3.equals("months")) {
                    finish = start.minusMonths(amount);
                    finish = finish.minusDays(1);
                    year = finish.getYear();
                    month = finish.getMonthOfYear();
                    day = finish.getDayOfMonth();
                    start = new DateTime(0000, 1, 1, 0, 0, 0, 0);
                    finish = new DateTime(year, month, day, 23, 59, 59, 59);
                    tc.addAttribute(TimexNames.type, TimexNames.DURATION);
                    tc.addAttribute(TimexNames.value, "P" + amount + "M");
                    return tc;
                }

                else if (temp3.equals("week") || temp3.equals("weeks")) {
                    finish = start.minusWeeks(amount);
                    finish = finish.minusDays(1);
                    year = finish.getYear();
                    month = finish.getMonthOfYear();
                    day = finish.getDayOfMonth();
                    start = new DateTime(0000, 1, 1, 0, 0, 0, 0);
                    finish = new DateTime(year, month, day, 23, 59, 59, 59);
                    tc.addAttribute(TimexNames.type, TimexNames.DURATION);
                    tc.addAttribute(TimexNames.value, "P" + amount + "W");
                    return tc;
                }

                else if (temp3.equals("decade") || temp3.equals("decades")) {
                    finish = start.minusYears(amount * 10);
                    finish = finish.minusDays(1);
                    year = finish.getYear();
                    month = finish.getMonthOfYear();
                    day = finish.getDayOfMonth();
                    start = new DateTime(0000, 1, 1, 0, 0, 0, 0);
                    finish = new DateTime(year, month, day, 23, 59, 59, 59);
                    amount *= 10;
                    tc.addAttribute(TimexNames.type, TimexNames.DURATION);
                    tc.addAttribute(TimexNames.value, "P" + amount + "Y");
                    return tc;
                }

                else if (temp3.equals("century") || temp3.equals("centuries")) {
                    finish = start.minusYears(amount * 100);
                    finish = finish.minusDays(1);
                    year = finish.getYear();
                    month = finish.getMonthOfYear();
                    day = finish.getDayOfMonth();
                    start = new DateTime(0000, 1, 1, 0, 0, 0, 0);
                    finish = new DateTime(year, month, day, 23, 59, 59, 59);
                    amount *= 100;
                    tc.addAttribute(TimexNames.type, TimexNames.DURATION);
                    tc.addAttribute(TimexNames.value, "P" + amount + "Y");
                    return tc;
                }

                else if (temp3.equals("hour") || temp3.equals("hours")) {
                    finish = start.minusHours(amount);
                    start = new DateTime(0000, 1, 1, 0, 0, 0, 0);
                    //interval = new Interval(start, finish);
                    tc.addAttribute(TimexNames.type, TimexNames.DURATION);
                    tc.addAttribute(TimexNames.value, "PT" + amount + "H");
                    return tc;
                }

                else if (temp3.equals("minute") || temp3.equals("minutes")) {
                    finish = start.minusMinutes(amount);
                    start = new DateTime(0000, 1, 1, 0, 0, 0, 0);
                    tc.addAttribute(TimexNames.type, TimexNames.DURATION);
                    tc.addAttribute(TimexNames.value, "PT" + amount + "M");
                    return tc;
                }

                else if (temp3.equals("second") || temp3.equals("seconds")) {
                    finish = start.minusSeconds(amount);
                    start = new DateTime(0000, 1, 1, 0, 0, 0, 0);
                    tc.addAttribute(TimexNames.type, TimexNames.DURATION);
                    tc.addAttribute(TimexNames.value, "PT" + amount + "S");
                    return tc;
                }

            }

            else if (temp1.equals("after") || temp1.equals("over")) {
                if (temp3.equals("years") || temp3.equals("year")) {
                    finish = start.minusYears((-1) * amount);
                    finish = finish.minusDays(-1);
                    year = finish.getYear();
                    month = finish.getMonthOfYear();
                    day = finish.getDayOfMonth();
                    finish = new DateTime(year, month, day, 0, 0, 0, 0);
                    start = new DateTime(9999, 12, 31, 23, 59, 59, 59);
                    tc.addAttribute(TimexNames.type, TimexNames.DURATION);
                    tc.addAttribute(TimexNames.value, "P" + amount + "Y");
                    return tc;
                }

                else if (temp3.equals("day") || temp3.equals("days")) {
                    finish = start.minusDays((-1) * amount);
                    finish = finish.minusDays(-1);
                    year = finish.getYear();
                    month = finish.getMonthOfYear();
                    day = finish.getDayOfMonth();
                    finish = new DateTime(year, month, day, 0, 0, 0, 0);
                    start = new DateTime(9999, 12, 31, 23, 59, 59, 59);
                    tc.addAttribute(TimexNames.type, TimexNames.DURATION);
                    tc.addAttribute(TimexNames.value, "P" + amount + "D");
                    return tc;

                }

                else if (temp3.equals("month") || temp3.equals("months")) {
                    finish = start.minusMonths((-1) * amount);
                    finish = finish.minusDays(-1);
                    year = finish.getYear();
                    month = finish.getMonthOfYear();
                    day = finish.getDayOfMonth();
                    finish = new DateTime(year, month, day, 0, 0, 0, 0);
                    start = new DateTime(9999, 12, 31, 23, 59, 59, 59);
                    tc.addAttribute(TimexNames.type, TimexNames.DURATION);
                    tc.addAttribute(TimexNames.value, "P" + amount + "M");
                    return tc;
                }

                else if (temp3.equals("week") || temp3.equals("weeks")) {
                    finish = start.minusWeeks((-1) * amount);
                    finish = finish.minusDays(-1);
                    year = finish.getYear();
                    month = finish.getMonthOfYear();
                    day = finish.getDayOfMonth();
                    finish = new DateTime(year, month, day, 0, 0, 0, 0);
                    start = new DateTime(9999, 12, 31, 23, 59, 59, 59);
                    tc.addAttribute(TimexNames.type, TimexNames.DURATION);
                    tc.addAttribute(TimexNames.value, "P" + amount + "W");
                    return tc;
                }

                else if (temp3.equals("decade") || temp3.equals("decades")) {
                    finish = start.minusYears((-1) * amount * 10);
                    finish = finish.minusDays(-1);
                    year = finish.getYear();
                    month = finish.getMonthOfYear();
                    day = finish.getDayOfMonth();
                    finish = new DateTime(year, month, day, 0, 0, 0, 0);
                    start = new DateTime(9999, 12, 31, 23, 59, 59, 59);
                    amount *= 10;
                    tc.addAttribute(TimexNames.type, TimexNames.DURATION);
                    tc.addAttribute(TimexNames.value, "P" + amount + "Y");
                    return tc;
                }

                else if (temp3.equals("century") || temp3.equals("centuries")) {
                    finish = start.minusYears((-1) * amount * 100);
                    finish = finish.minusDays(-1);
                    year = finish.getYear();
                    month = finish.getMonthOfYear();
                    day = finish.getDayOfMonth();
                    finish = new DateTime(year, month, day, 0, 0, 0, 0);
                    start = new DateTime(9999, 12, 31, 23, 59, 59, 59);
                    interval = new Interval(finish, start);
                    amount *= 100;
                    tc.addAttribute(TimexNames.type, TimexNames.DURATION);
                    tc.addAttribute(TimexNames.value, "P" + amount + "Y");
                    return tc;
                }

                else if (temp3.equals("hour") || temp3.equals("hours")) {
                    finish = start.minusHours((-1) * amount);
                    start = new DateTime(9999, 12, 31, 23, 59, 59, 59);
                    interval = new Interval(finish, start);
                    tc.addAttribute(TimexNames.type, TimexNames.DURATION);
                    tc.addAttribute(TimexNames.value, "PT" + amount + "H");
                    return tc;
                }

                else if (temp3.equals("minute") || temp3.equals("minutes")) {
                    finish = start.minusMinutes((-1) * amount);
                    start = new DateTime(9999, 12, 31, 23, 59, 59, 59);
                    interval = new Interval(finish, start);
                    tc.addAttribute(TimexNames.type, TimexNames.DURATION);
                    tc.addAttribute(TimexNames.value, "PT" + amount + "M");
                    return tc;
                }

                else if (temp3.equals("second") || temp3.equals("seconds")) {
                    finish = start.minusSeconds((-1) * amount);
                    start = new DateTime(9999, 12, 31, 23, 59, 59, 59);
                    interval = new Interval(finish, start);
                    tc.addAttribute(TimexNames.type, TimexNames.DURATION);
                    tc.addAttribute(TimexNames.value, "PT" + amount + "S");
                    return tc;
                }

            }
        }
    }
    return null;
}

From source file:eu.uqasar.service.dataadapter.JiraDataService.java

License:Apache License

/**
 * /*www.  j a  v  a  2 s .  c  o m*/
 * @param timeInterval
 * @return
 */
private Date getDateForPeriod(String timeInterval) {
    DateTime now = DateTime.now();
    Date date;

    switch (timeInterval) {
    case "Last Year":
        date = now.minusMonths(12).toDate();
        break;
    case "Last 6 Months":
        date = now.minusMonths(6).toDate();
        break;
    case "Last Month":
        date = now.minusMonths(1).toDate();
        break;
    case "Last Week":
        date = now.minusWeeks(1).toDate();
        break;
    default:
        date = now.minusYears(5).toDate();
        break;
    }
    //System.out.println("datedatedate:"+date);

    return date;
}

From source file:eu.uqasar.service.dataadapter.SonarDataService.java

License:Apache License

/**
 * /*www.  j  a v  a  2  s  .c o m*/
 * @param period
 * @return
 */
private Date getDateForPeriod(String period) {
    DateTime now = DateTime.now();
    Date date;

    switch (period) {
    case "Last Year":
        date = now.minusMonths(12).toDate();
        break;
    case "Last 6 Months":
        date = now.minusMonths(6).toDate();
        break;
    case "Last Month":
        date = now.minusMonths(1).toDate();
        break;
    case "Last Week":
        date = now.minusWeeks(1).toDate();
        break;
    default:
        date = now.minusYears(5).toDate();
        break;
    }
    //System.out.println("datedatedate:"+date);

    return date;
}

From source file:fi.hsl.parkandride.core.domain.prediction.RelativizedAverageOfPreviousWeeksPredictor.java

License:EUPL

@Override
public List<Prediction> predict(PredictorState state, UtilizationHistory history, int maxCapacity) {
    Optional<Utilization> latest = history.getLatest();
    if (!latest.isPresent()) {
        return Collections.emptyList();
    }/*from  ww  w . ja  v  a 2 s .c o m*/
    DateTime now = state.latestUtilization = latest.get().timestamp;
    final UtilizationHistory inMemoryHistory = new UtilizationHistoryList(
            history.getRange(now.minusWeeks(3).minus(LOOKBACK_MINUTES), now));

    List<List<Prediction>> groupedByWeek = LOOKBACK_PERIODS.stream().map(offset -> {
        DateTime start = now.minus(offset);
        DateTime end = start.plus(PredictionRepository.PREDICTION_WINDOW);
        Optional<Utilization> utilizationAtReferenceTime = inMemoryHistory.getAt(start);
        if (!utilizationAtReferenceTime.isPresent()) {
            return null;
        }

        Integer spacesAvailableAtReferenceTime = utilizationAtReferenceTime.get().spacesAvailable;
        List<Utilization> utilizations = inMemoryHistory.getRange(start, end);
        return utilizations.stream().map(u -> new Prediction(u.timestamp.plus(offset),
                u.spacesAvailable - spacesAvailableAtReferenceTime)).collect(Collectors.toList());
    }).filter(Objects::nonNull).collect(Collectors.toList());

    List<List<Prediction>> groupedByTimeOfDay = ListUtil.transpose(groupedByWeek);

    return groupedByTimeOfDay.stream().map(predictions -> reduce(predictions, latest.get().spacesAvailable,
            getUtilizationMultiplier(now, inMemoryHistory), maxCapacity)).collect(Collectors.toList());
}

From source file:javaapplication1.GenerateTest2DK.java

public static void main(String[] args) throws IOException {
    int episodeNumber = 0;
    BufferedReader buffreader = null;
    try {/*from  w  w w.  ja v  a  2s  .  c o  m*/
        // open the file for reading
        InputStream fis = new FileInputStream("kuasha-episode.txt");

        // if file the available for reading
        if (fis != null) {

            // prepare the file for reading
            InputStreamReader chapterReader = new InputStreamReader(fis);
            buffreader = new BufferedReader(chapterReader);

            String line = null;
            while (true) {
                try {
                    line = buffreader.readLine();

                } catch (Exception e) {

                }

                if (line == null)
                    break;

                songPath.add(line);
                episodeNumber++;
            }

            /*String line;
                    
            // read every line of the file into the line-variable, on line at the time
            do {
               line = buffreader.readLine();
              // do something with the line 
               System.out.println(line);
            } while (line != null);
              */

        }
    } catch (Exception e) {

    } finally {

    }

    String[] monthStr2 = { "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nove",
            "Dec" };

    String[] monthStr = { "January", "February", "March", "April", "May", "June", "July", "August", "September",
            "October", "November", "December" };

    String[] urlImage = { "http://i.imgur.com/Pks8tmU.jpg", "http://i.imgur.com/UHv8tdw.jpg",
            "http://i.imgur.com/AybMRiN.jpg", "http://i.imgur.com/J7gMxN4.jpg",
            "http://i.imgur.com/8C3N9lN.jpg", "http://i.imgur.com/p5RjLUq.jpg", "http://i.imgur.com/vp97ZQe.jpg"

    };

    List<DateTime> fridays = new ArrayList<>();
    boolean reachedAFriday = false;

    String start = "12/08/2010";
    String end = "01/02/2011";
    DateTimeFormatter pattern = DateTimeFormat.forPattern("dd/mm/yyyy");
    DateTime startDate = new DateTime();//(2018, 06, 22, 0, 0, 0, 0);//pattern.parseDateTime(start); // year-month-day
    DateTime endDate = new DateTime(2010, 1, 1, 0, 0, 0, 0);//pattern.parseDateTime(end);

    int startRange = 0;
    int yearID = 0;
    int albumID = 0;
    int songID = 0;

    String url = "{\"albumList\":[";
    String prevYear = "";

    Random r = new Random();
    int i1 = (r.nextInt(80) + 65);
    while (startDate.isAfter(endDate)) {
        if (songID >= episodeNumber)
            break;
        String dayOfYaer = "" + startDate.getYear();

        if (!prevYear.equals(dayOfYaer)) {
            url += "{\"yearID\":\"" + yearID + "\", \"yearName\":\"" + "YEAR-" + dayOfYaer
                    + "\", \"monthList\":[";
            prevYear = "" + startDate.getYear();
            yearID++;
        }

        String dayOfMonth = "" + monthStr[startDate.getMonthOfYear() - 1];
        url += "{\"albumID\":\"" + albumID + "\", \"albumName\":\"" + "" + dayOfMonth + "\", \"songList\":["; //+"Month-"+startDate.dayOfMonth() +"\"},";
        //System.out.println("fahad -- "+ (startDate.getDayOfMonth()-1));
        if (startRange == 0)
            startRange = songID;
        while ((monthStr[startDate.getMonthOfYear() - 1]).equals(dayOfMonth)) {
            if (songID >= episodeNumber)
                break;
            if (startDate.getDayOfWeek() == DateTimeConstants.MONDAY) {
                fridays.add(startDate);
                reachedAFriday = true;

                String MothWithTwoDigit = String.format("%02d", startDate.getMonthOfYear());
                String dateWithTwoDigit = String.format("%02d", startDate.getDayOfMonth());

                String date = startDate.getYear() + "-" + MothWithTwoDigit + "-" + dateWithTwoDigit;
                String EpisodesName = "Ep-" + dateWithTwoDigit + " " + monthStr2[startDate.getMonthOfYear() - 1]
                        + "," + startDate.getYear();
                if (songID == 0)
                    EpisodesName = "(New)" + EpisodesName;

                path = songPath.get(episodeNumber - songID - 1);//"http://dl.bhoot-fm.com/Bhoot-FM_"+date+"_(Bhoot-FM.com).mp3";
                artist = "Kuasha";
                composer = "ABC-Radio";
                imageUrl = urlImage[r.nextInt(7)];//"http://3.bp.blogspot.com/-nd09lbpK1Mk/U7hkntBHF4I/AAAAAAAAAM8/FFsAfjT9tW8/s1600/bhoot.jpg";

                url += "{\"songID\":\"" + songID + "\", \"title\":\"" + EpisodesName + "\", \"artist\":\""
                        + artist + "\", \"path\":\"" + path + "\", \"albumId\":\"" + albumID
                        + "\", \"composer\":\"" + composer + "\", \"imageUrl\":\"" + imageUrl + "\"},";

                songID++;
            }
            if (reachedAFriday) {
                startDate = startDate.minusWeeks(1);
            } else {
                startDate = startDate.minusDays(1);
            }

            System.out.println("fahad -- " + (startDate.getDayOfMonth() - 1));
        }

        albumID++;
        url = url.substring(0, url.length() - 1) + "], \"songListRange\":\"" + startRange + "-" + (songID - 1)
                + "\"},";

        startRange = 0;

        if (!prevYear.equals("" + startDate.getYear())) {
            url = url.substring(0, url.length() - 1) + "]},";
            //prevYear = dayOfYaer;
        }
    }

    url = url.substring(0, url.length() - 1) + "]}]}";//]}
    System.out.println(url);

    File file = new File("filename_kuasha.txt");

    // if file doesnt exists, then create it
    if (!file.exists()) {
        file.createNewFile();
    }

    FileWriter fw = new FileWriter(file.getAbsoluteFile());
    BufferedWriter bw = new BufferedWriter(fw);
    bw.write(url);
    bw.close();

    System.out.println("Done");

}

From source file:javaapplication1.GenerateTest2Dor.java

public static void main(String[] args) throws IOException {
    BufferedReader buffreader = null;
    try {//from w  w  w .  j  av  a  2s.c  o m
        // open the file for reading
        InputStream fis = new FileInputStream("Dor.txt");

        // if file the available for reading
        if (fis != null) {

            // prepare the file for reading
            InputStreamReader chapterReader = new InputStreamReader(fis);
            buffreader = new BufferedReader(chapterReader);

            String line = null;
            while (true) {
                try {
                    line = buffreader.readLine();

                } catch (Exception e) {

                }

                if (line == null)
                    break;

                songPath.add(line);

            }

            /*String line;
                    
            // read every line of the file into the line-variable, on line at the time
            do {
               line = buffreader.readLine();
              // do something with the line 
               System.out.println(line);
            } while (line != null);
              */

        }
    } catch (Exception e) {

    } finally {

    }

    String[] monthStr2 = { "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nove",
            "Dec" };

    String[] monthStr = { "January", "February", "March", "April", "May", "June", "July", "August", "September",
            "October", "November", "December" };

    String[] urlImage = { "http://i.imgur.com/DMmPf5f.jpg", "http://i.imgur.com/8C3N9lN.jpg",
            "http://i.imgur.com/MGQSXb1.jpg", "http://i.imgur.com/nyv8gOD.jpg",
            "http://i.imgur.com/kzr9p5M.jpg", "http://i.imgur.com/nBTPbty.jpg", "http://i.imgur.com/VvLI4sY.jpg"

    };

    List<DateTime> fridays = new ArrayList<>();
    boolean reachedAFriday = false;

    String start = "12/08/2010";
    String end = "01/02/2011";
    DateTimeFormatter pattern = DateTimeFormat.forPattern("dd/mm/yyyy");
    DateTime startDate = new DateTime(2018, 03, 03, 0, 0, 0, 0);//pattern.parseDateTime(start); // year-month-day
    DateTime endDate = new DateTime(2010, 1, 1, 0, 0, 0, 0);//pattern.parseDateTime(end);

    int startRange = 0;
    int yearID = 0;
    int albumID = 0;
    int songID = 0;
    int episodeNumber = 172;
    String url = "{\"albumList\":[";
    String prevYear = "";

    Random r = new Random();
    int i1 = (r.nextInt(80) + 65);
    while (startDate.isAfter(endDate)) {
        if (songID >= episodeNumber)
            break;
        String dayOfYaer = "" + startDate.getYear();

        if (!prevYear.equals(dayOfYaer)) {
            url += "{\"yearID\":\"" + yearID + "\", \"yearName\":\"" + "YEAR-" + dayOfYaer
                    + "\", \"monthList\":[";
            prevYear = "" + startDate.getYear();
            yearID++;
        }

        String dayOfMonth = "" + monthStr[startDate.getMonthOfYear() - 1];
        url += "{\"albumID\":\"" + albumID + "\", \"albumName\":\"" + "" + dayOfMonth + "\", \"songList\":["; //+"Month-"+startDate.dayOfMonth() +"\"},";
        //System.out.println("fahad -- "+ (startDate.getDayOfMonth()-1));
        if (startRange == 0)
            startRange = songID;
        while ((monthStr[startDate.getMonthOfYear() - 1]).equals(dayOfMonth)) {
            if (songID >= episodeNumber)
                break;
            if (startDate.getDayOfWeek() == DateTimeConstants.THURSDAY) {
                fridays.add(startDate);
                reachedAFriday = true;

                String MothWithTwoDigit = String.format("%02d", startDate.getMonthOfYear());
                String dateWithTwoDigit = String.format("%02d", startDate.getDayOfMonth());

                String date = startDate.getYear() + "-" + MothWithTwoDigit + "-" + dateWithTwoDigit;
                String EpisodesName = "Ep-" + dateWithTwoDigit + " " + monthStr2[startDate.getMonthOfYear() - 1]
                        + "," + startDate.getYear();
                if (songID == 0)
                    EpisodesName = "(New)" + EpisodesName;

                path = songPath.get(episodeNumber - songID - 1);//"http://dl.bhoot-fm.com/Bhoot-FM_"+date+"_(Bhoot-FM.com).mp3";
                artist = "Dor";
                composer = "ABC-Radio";
                imageUrl = urlImage[r.nextInt(7)];//"http://3.bp.blogspot.com/-nd09lbpK1Mk/U7hkntBHF4I/AAAAAAAAAM8/FFsAfjT9tW8/s1600/bhoot.jpg";

                url += "{\"songID\":\"" + songID + "\", \"title\":\"" + EpisodesName + "\", \"artist\":\""
                        + artist + "\", \"path\":\"" + path + "\", \"albumId\":\"" + albumID
                        + "\", \"composer\":\"" + composer + "\", \"imageUrl\":\"" + imageUrl + "\"},";

                songID++;
            }
            if (reachedAFriday) {
                startDate = startDate.minusWeeks(1);
            } else {
                startDate = startDate.minusDays(1);
            }

            System.out.println("fahad -- " + (startDate.getDayOfMonth() - 1));
        }

        albumID++;
        url = url.substring(0, url.length() - 1) + "], \"songListRange\":\"" + startRange + "-" + (songID - 1)
                + "\"},";

        startRange = 0;

        if (!prevYear.equals("" + startDate.getYear())) {
            url = url.substring(0, url.length() - 1) + "]},";
            //prevYear = dayOfYaer;
        }
    }

    url = url.substring(0, url.length() - 1) + "]}]}";//]}
    System.out.println(url);

    File file = new File("filename_dor.txt");

    // if file doesnt exists, then create it
    if (!file.exists()) {
        file.createNewFile();
    }

    FileWriter fw = new FileWriter(file.getAbsoluteFile());
    BufferedWriter bw = new BufferedWriter(fw);
    bw.write(url);
    bw.close();

    System.out.println("Done");

}

From source file:javaapplication1.GenerateTest2JibonerGolpo.java

public static void main(String[] args) throws IOException {
    int episodeNumber = 0;
    BufferedReader buffreader = null;
    try {/*from  www .  jav  a 2  s  . c  o  m*/
        // open the file for reading
        InputStream fis = new FileInputStream("api_jibon/Jiboner_Golpo.txt");

        // if file the available for reading
        if (fis != null) {

            // prepare the file for reading
            InputStreamReader chapterReader = new InputStreamReader(fis);
            buffreader = new BufferedReader(chapterReader);

            String line = null;
            while (true) {
                try {
                    line = buffreader.readLine();

                } catch (Exception e) {

                }

                if (line == null)
                    break;
                songPath.add(line);
                episodeNumber++;

            }

            /*String line;
                    
            // read every line of the file into the line-variable, on line at the time
            do {
               line = buffreader.readLine();
              // do something with the line 
               System.out.println(line);
            } while (line != null);
              */

        }
    } catch (Exception e) {

    } finally {

    }

    String[] monthStr2 = { "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nove",
            "Dec" };

    String[] monthStr = { "January", "February", "March", "April", "May", "June", "July", "August", "September",
            "October", "November", "December" };

    String[] urlImage = { "https://i.imgur.com/VAwVL2V.jpg", "https://i.imgur.com/bvWyY1t.jpg",
            "https://i.imgur.com/VAwVL2V.jpg", "https://i.imgur.com/bvWyY1t.jpg",
            "https://i.imgur.com/VAwVL2V.jpg", "https://i.imgur.com/bvWyY1t.jpg",
            "https://i.imgur.com/VAwVL2V.jpg"

    };

    List<DateTime> fridays = new ArrayList<>();
    boolean reachedAFriday = false;

    String start = "12/08/2010";
    String end = "01/02/2011";
    DateTimeFormatter pattern = DateTimeFormat.forPattern("dd/mm/yyyy");
    DateTime startDate = new DateTime();//(2018, 06, 16, 0, 0, 0, 0);//pattern.parseDateTime(start); // year-month-day
    DateTime endDate = new DateTime(2010, 1, 1, 0, 0, 0, 0);//pattern.parseDateTime(end);

    int startRange = 0;
    int yearID = 0;
    int albumID = 0;
    int songID = 0;

    String url = "{\"albumList\":[";
    String prevYear = "";

    Random r = new Random();
    int i1 = (r.nextInt(80) + 65);
    while (startDate.isAfter(endDate)) {
        if (songID >= episodeNumber)
            break;
        String dayOfYaer = "" + startDate.getYear();

        if (!prevYear.equals(dayOfYaer)) {
            url += "{\"yearID\":\"" + yearID + "\", \"yearName\":\"" + "YEAR-" + dayOfYaer
                    + "\", \"monthList\":[";
            prevYear = "" + startDate.getYear();
            yearID++;
        }

        String dayOfMonth = "" + monthStr[startDate.getMonthOfYear() - 1];
        url += "{\"albumID\":\"" + albumID + "\", \"albumName\":\"" + "" + dayOfMonth + "\", \"songList\":["; //+"Month-"+startDate.dayOfMonth() +"\"},";
        //System.out.println("fahad -- "+ (startDate.getDayOfMonth()-1));
        if (startRange == 0)
            startRange = songID;
        while ((monthStr[startDate.getMonthOfYear() - 1]).equals(dayOfMonth)) {
            if (songID >= episodeNumber)
                break;
            if (startDate.getDayOfWeek() == DateTimeConstants.WEDNESDAY) {
                fridays.add(startDate);
                reachedAFriday = true;

                String MothWithTwoDigit = String.format("%02d", startDate.getMonthOfYear());
                String dateWithTwoDigit = String.format("%02d", startDate.getDayOfMonth());

                String date = startDate.getYear() + "-" + MothWithTwoDigit + "-" + dateWithTwoDigit;
                String EpisodesName = "Ep-" + dateWithTwoDigit + " " + monthStr2[startDate.getMonthOfYear() - 1]
                        + "," + startDate.getYear();
                if (songID == 0)
                    EpisodesName = "(New)" + EpisodesName;

                path = songPath.get(episodeNumber - songID - 1);//"http://dl.bhoot-fm.com/Bhoot-FM_"+date+"_(Bhoot-FM.com).mp3";

                String performaerName = "";
                if (path != null) {
                    System.out.println("" + path);

                    String splitedName[] = path.split("-");

                    performaerName = splitedName[splitedName.length - 1].substring(0,
                            splitedName[splitedName.length - 1].length() - 17);
                    EpisodesName = EpisodesName + "-" + performaerName;
                }

                artist = "Jiboner Golpo";
                composer = "ABC-Radio";
                imageUrl = urlImage[r.nextInt(7)];//"http://3.bp.blogspot.com/-nd09lbpK1Mk/U7hkntBHF4I/AAAAAAAAAM8/FFsAfjT9tW8/s1600/bhoot.jpg";

                url += "{\"songID\":\"" + songID + "\", \"title\":\"" + EpisodesName + "\", \"artist\":\""
                        + artist + "\", \"path\":\"" + path + "\", \"albumId\":\"" + albumID
                        + "\", \"composer\":\"" + composer + "\", \"imageUrl\":\"" + imageUrl + "\"},";

                songID++;
            }
            if (reachedAFriday) {
                startDate = startDate.minusWeeks(1);
            } else {
                startDate = startDate.minusDays(1);
            }

            System.out.println("fahad -- " + (startDate.getDayOfMonth() - 1));
        }

        albumID++;
        url = url.substring(0, url.length() - 1) + "], \"songListRange\":\"" + startRange + "-" + (songID - 1)
                + "\"},";

        startRange = 0;

        if (!prevYear.equals("" + startDate.getYear())) {
            url = url.substring(0, url.length() - 1) + "]},";
            //prevYear = dayOfYaer;
        }
    }

    url = url.substring(0, url.length() - 1) + "]}]}";//]}
    System.out.println(url);

    File file = new File("api_jibon/filename_jiboner_golpo.json");

    // if file doesnt exists, then create it
    if (!file.exists()) {
        file.createNewFile();
    }

    FileWriter fw = new FileWriter(file.getAbsoluteFile());
    BufferedWriter bw = new BufferedWriter(fw);
    bw.write(url);
    bw.close();

    System.out.println("Done");

}