Example usage for org.joda.time DateTime getYear

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

Introduction

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

Prototype

public int getYear() 

Source Link

Document

Get the year field value.

Usage

From source file:de.raion.xmppbot.command.DilbertCommand.java

License:Apache License

private String createRandomUrl() {

    DateTime minDate = new DateTime(2006, 1, 1, 0, 0, 0);
    DateTime maxDate = new DateTime(System.currentTimeMillis());

    int randomYear = getRandomInRange(minDate.getYear(), maxDate.getYear());
    int randomMonth = getRandomInRange(1, 12);
    int randomDay = getRandomInRange(1, getDaysInMonth(randomYear, randomMonth));

    DateTime randomDate = new DateTime(randomYear, randomMonth, randomDay, 0, 0, 0);
    DateTimeFormatter formatter = DateTimeFormat.forPattern("yyyy-MM-dd");

    StringBuilder builder = new StringBuilder(RANDOM_BASE_URL);
    builder.append(formatter.print(randomDate));
    return builder.toString();
}

From source file:de.speexx.jira.jan.command.transition.IssueTransitionFetcher.java

License:Open Source License

LocalDate createLocalDate(final DateTime dt) {
    final int year = dt.getYear();
    final int month = dt.getMonthOfYear();
    final int day = dt.getDayOfMonth();
    return LocalDate.of(year, month, day);
}

From source file:divconq.lang.BigDateTime.java

License:Open Source License

/**
 * @param date translates into BigDateTime
 *///w  ww  . j  a  v  a2s  . c o  m
public BigDateTime(DateTime date) {
    if (date == null)
        return;

    // make sure we are using ISO and UTC
    date = date.toDateTime(ISOChronology.getInstanceUTC());
    //date = date.toDateTime(DateTimeZone.UTC);      

    this.year = 50000000000L + date.getYear(); // ISO says 1 BCE = 0, 2 BCE = -1, etc
    this.month = date.getMonthOfYear();
    this.day = date.getDayOfMonth();
    this.hour = date.getHourOfDay();
    this.minute = date.getMinuteOfHour();
    this.second = date.getSecondOfMinute();
}

From source file:divconq.util.TimeUtil.java

License:Open Source License

/**
 * detect if given datetime lands on a DST transition
 * //  ww  w . j  ava 2s  . c  o  m
 * @param n date to check
 * @return START if is a start of DST, END if is a end of DST, NA means day is not a transition
 */
public static DaylightTransition checkDST(DateTime n) {
    DateTime start = TimeUtil.startDST(n.getYear());

    if (start.toLocalDate().equals(n.toLocalDate()))
        return DaylightTransition.START;

    DateTime end = TimeUtil.startDST(n.getYear());

    if (end.toLocalDate().equals(n.toLocalDate()))
        return DaylightTransition.END;

    return DaylightTransition.NA;
}

From source file:dk.dtu.ws.model.ProjectDate.java

public ProjectDate(org.joda.time.DateTime date) {
    this.year = date.getYear();
    this.month = date.getMonthOfYear();
    this.day = date.getDayOfMonth();
}

From source file:dk.nsi.haiba.lprimporter.rules.LPRDateTimeRule.java

License:Open Source License

@Override
public LPRRule doProcessing(Statistics statistics) {

    List<Administration> adjustedContacts = new ArrayList<Administration>();

    // sort list after inDate, if more contacts have same in datetime - then they are sorted after out datetime.
    Collections.sort(contacts, new AdministrationInDateComparator());

    for (Administration contact : contacts) {
        // Increment counter for rule #4
        statistics.rule4Counter += 1;//from w ww. jav a 2  s. c o m

        // AdmissionStartHour for the contact is default set to 0 if not applied in the database, adjust it with the default value from the propertiesfile
        DateTime admissionStart = new DateTime(contact.getIndlaeggelsesDatetime());
        if (admissionStart.getHourOfDay() == 0 && defaultContactInHour != 0) {
            admissionStart = admissionStart.withHourOfDay(defaultContactInHour);
            contact.setIndlaeggelsesDatetime(admissionStart.toDate());
        }

        // AdmissionEndtime must be adjusted, if it was set to 0
        Date udskrivningsDatetime = contact.getUdskrivningsDatetime();
        if (udskrivningsDatetime != null) {
            DateTime admissionEnd = new DateTime(udskrivningsDatetime.getTime());
            if (admissionEnd.getHourOfDay() == 0) {
                // does a procedure exist on the same date, set the procedure hour as admission end hour
                int hourOfDay = 0;
                for (LPRProcedure procedure : contact.getLprProcedures()) {
                    DateTime procedureTime = new DateTime(procedure.getProcedureDatetime());
                    if (admissionEnd.getYear() == procedureTime.getYear()
                            && admissionEnd.getMonthOfYear() == procedureTime.getMonthOfYear()
                            && admissionEnd.getDayOfMonth() == procedureTime.getDayOfMonth()) {
                        // examine all procedures from the same day, and get the latest hour of day.
                        if (procedureTime.getHourOfDay() > hourOfDay) {
                            hourOfDay = procedureTime.getHourOfDay();
                        }
                    }
                }
                admissionEnd = admissionEnd.withHourOfDay(hourOfDay);
            }

            // Then if admissionEnd still is 0, check the in date time is the same day 
            if (admissionEnd.getHourOfDay() == 0) {
                if (admissionEnd.getYear() == admissionStart.getYear()
                        && admissionEnd.getMonthOfYear() == admissionStart.getMonthOfYear()
                        && admissionEnd.getDayOfMonth() == admissionStart.getDayOfMonth()) {
                    // if same date, set end-datetime to in-datetime + defaultvalue
                    admissionEnd = admissionEnd.withHourOfDay(admissionStart.getHourOfDay())
                            .plusHours(defaultContactOuthoursAddedInhours);
                }
            }

            // Then if admissionEnd still is 0, and the enddate is after indate set it to a configured defaultvalue 
            if (admissionEnd.getHourOfDay() == 0) {
                admissionEnd = admissionEnd.withHourOfDay(defaultAdmissionEndHours);
            }

            contact.setUdskrivningsDatetime(admissionEnd.toDate());

            List<LPRProcedure> processedProcedures = new ArrayList<LPRProcedure>();
            for (LPRProcedure procedure : contact.getLprProcedures()) {
                // if procedure time is set to 0 - set it to 12 the same day
                Date procedureDatetime = procedure.getProcedureDatetime();
                if (procedureDatetime != null) {
                    DateTime procedureDate = new DateTime(procedureDatetime.getTime());
                    // if procedureDate is more than 24 hours after admissionEndDate it is an error
                    if (procedureDate.isAfter(admissionEnd.plusHours(24))) {
                        BusinessRuleError be = new BusinessRuleError(contact.getLprReference().getDbId(),
                                contact.getRecordNumber(),
                                resolver.getMessage(
                                        "rule.datetime.proceduredate.is.more.than.24hous.after.enddate"),
                                resolver.getMessage("rule.datetime.name"));
                        businessRuleErrorLog.log(be);
                        // error, procedure is deleted from the contact.
                        continue;
                    }

                    if (procedureDate.getHourOfDay() == 0) {
                        procedureDate = procedureDate.withHourOfDay(defaultProcedureHours);
                        procedure.setProcedureDatetime(procedureDate.toDate());
                    }
                    processedProcedures.add(procedure);
                } else {
                    BusinessRuleError error = new BusinessRuleError(contact.getLprReference().getDbId(),
                            contact.getRecordNumber(),
                            resolver.getMessage("rule.datetime.proceduredate.isempty"),
                            resolver.getMessage("rule.datetime.name"));
                    throw new RuleAbortedException("Rule aborted due to BusinessRuleError", error);
                }
            }
            contact.setLprProcedures(processedProcedures);

        } else {
            // patient is currently at the hospital
            contact.setCurrentPatient(true);

            log.debug("Admission End datetime is null for LPR ref: " + contact.getRecordNumber()
                    + " patient is probably not discharged from hospital yet");

            // if in-date is not more than 30 days older than now - set out-date to today at 24:00
            DateTime now = new DateTime();
            DateTime in = new DateTime(contact.getIndlaeggelsesDatetime());
            if (in.isAfter(now.minusDays(currentPatientDefaultInterval))) {
                DateTime out = in.withHourOfDay(0).withMinuteOfHour(0).withSecondOfMinute(0)
                        .plusHours(currentPatientHoursIfLessThanInterval);
                contact.setUdskrivningsDatetime(out.toDate());
            } else {
                // else set out-date to in-date + 30 days
                DateTime out = in.plusDays(currentPatientDaysIfGreaterThanInterval);
                contact.setUdskrivningsDatetime(out.toDate());
            }
        }

        // Rule #6 in time is after out time
        DateTime in = new DateTime(contact.getIndlaeggelsesDatetime());
        DateTime out = new DateTime(contact.getUdskrivningsDatetime());
        if (in.isAfter(out)) {
            // Increment counter for rule #6
            statistics.rule6Counter += 1;
            // log the error and ignore the contact.
            BusinessRuleError be = new BusinessRuleError(contact.getLprReference().getDbId(),
                    contact.getRecordNumber(), resolver.getMessage("rule.datetime.indate.isafter.outdate"),
                    resolver.getMessage("rule.datetime.name"));
            businessRuleErrorLog.log(be);
            // Increment count for contacts with errors
            statistics.contactErrorCounter += 1;
            lprDao.updateImportTime(contact.getLprReference(), Outcome.FAILURE);
            continue;
        }

        adjustedContacts.add(contact);
    }

    // set this for unittesting purpose
    contacts = adjustedContacts;
    if (contacts.size() == 0) {
        log.debug("all contacts were prone to error, abort the flow");
        return null;
    }

    // setup the next rule in the chain
    removeIdenticalContactsRule.setContacts(contacts);

    return removeIdenticalContactsRule;
}

From source file:dk.teachus.utils.DateUtils.java

License:Apache License

public static DateTime resetDateTime(DateTime time, DateTime resetTo) {
    DateTime timeDate = time;//from ww w . j a va 2  s.c o  m
    DateTime resetTimeDate = resetTo;

    timeDate = timeDate
            .withDate(resetTimeDate.getYear(), resetTimeDate.getMonthOfYear(), resetTimeDate.getDayOfMonth())
            .withSecondOfMinute(0).withMillisOfSecond(0);

    return timeDate;
}

From source file:edu.cornell.mannlib.vitro.webapp.edit.n3editing.VTwo.DateTimeWithPrecisionVTwo.java

License:Open Source License

/**
 * This produces a map for use in the template. Will be using this b/c 
 *//*from   ww  w  . jav a  2s. c om*/
public Map getMapForTemplate(EditConfigurationVTwo editConfig, MultiValueEditSubmission editSub) {
    Map<String, Object> map = new HashMap<String, Object>();

    //always need the fieldName, required precision, and constants
    map.put("fieldName", getFieldName());
    addPrecisionConstants(map);
    map.put("minimumPrecision", minimumPrecision.uri());
    map.put("requiredLevel", displayRequiredLevel.uri());

    //Still expecting single precision uri not multiple
    String precisionUri = getPrecision(editConfig, editSub);

    VitroVocabulary.Precision existingPrec = toPrecision(precisionUri);

    if (precisionUri != null && !"".equals(precisionUri) && existingPrec == null) {
        if (!BLANK_SENTINEL.equals(precisionUri)) {
            log.debug("field " + getFieldName() + ": existing precision uri was " + "'" + precisionUri
                    + "' but could not convert to Precision object");
        }
    }

    if (precisionUri == null || precisionUri.isEmpty() || existingPrec == null) {
        map.put("existingPrecision", "");

        /* no precision so there should also be no datetime */
        DateTime value = getTimeValue(editConfig, editSub);
        if (value != null)
            log.debug("Unexpected state: Precision for " + getFieldName() + " was '" + precisionUri
                    + "' but date time was " + value);

        map.put("year", "");
        map.put("month", "");
        map.put("day", "");
        map.put("hour", "");
        map.put("minute", "");
        map.put("second", "");
    } else if (VitroVocabulary.Precision.NONE.uri().equals(precisionUri)) {
        //bdc34: not sure what to do with the NONE precision
        map.put("existingPrecision", precisionUri);

        map.put("year", "");
        map.put("month", "");
        map.put("day", "");
        map.put("hour", "");
        map.put("minute", "");
        map.put("second", "");
    } else {
        map.put("existingPrecision", precisionUri);

        DateTime value = getTimeValue(editConfig, editSub);
        /* This is the case where there is a precision so there should be a datetime */
        if (value == null) {
            //If there is no value, then this is an error condition
            log.error("Field " + getFieldName() + " has precision " + precisionUri
                    + " but the date time value is null ");
            map.put("year", "");
            map.put("month", "");
            map.put("day", "");
            map.put("hour", "");
            map.put("minute", "");
            map.put("second", "");

        } else {

            /* only put the values in the map for ones which are significant based on the precision */
            if (existingPrec.ordinal() >= VitroVocabulary.Precision.SECOND.ordinal())
                map.put("second", Integer.toString(value.getSecondOfMinute()));
            else
                map.put("second", "");

            if (existingPrec.ordinal() >= VitroVocabulary.Precision.MINUTE.ordinal())
                map.put("minute", Integer.toString(value.getMinuteOfHour()));
            else
                map.put("minute", "");

            if (existingPrec.ordinal() >= VitroVocabulary.Precision.HOUR.ordinal())
                map.put("hour", Integer.toString(value.getHourOfDay()));
            else
                map.put("hour", "");

            if (existingPrec.ordinal() >= VitroVocabulary.Precision.DAY.ordinal())
                map.put("day", Integer.toString(value.getDayOfMonth()));
            else
                map.put("day", "");

            if (existingPrec.ordinal() >= VitroVocabulary.Precision.MONTH.ordinal())
                map.put("month", Integer.toString(value.getMonthOfYear()));
            else
                map.put("month", "");

            if (existingPrec.ordinal() >= VitroVocabulary.Precision.YEAR.ordinal())
                map.put("year", Integer.toString(value.getYear()));
            else
                map.put("year", "");
        }
    }

    return map;
}

From source file:edu.cornell.mannlib.vitro.webapp.visualization.visutils.UtilityFunctions.java

License:Open Source License

/**
 * This method will be called to get the inferred end year for the entity. 
 * The 2 choices, in order, are,//  w  ww  .  ja v  a  2  s.  c om
 *       1. parsed year from core:DateTime object saved in core:dateTimeValue 
 *       2. Default Entity Year 
 * @return
 */
public static String getValidYearFromCoreDateTimeString(String inputDate, String defaultYearInCaseOfError) {
    /*
     * Always return default year identifier in case of an illegal parsed year.
     * */
    String parsedInputYear = defaultYearInCaseOfError;

    if (inputDate != null) {

        DateTime validParsedDateTimeObject = UtilityFunctions.getValidParsedDateTimeObject(inputDate);

        if (validParsedDateTimeObject != null) {
            return String.valueOf(validParsedDateTimeObject.getYear());
        }
    }

    return parsedInputYear;
}

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/*from  w w  w.j a  va2  s.c om*/
  * @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;

}