Example usage for org.joda.time DateTime getDayOfMonth

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

Introduction

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

Prototype

public int getDayOfMonth() 

Source Link

Document

Get the day of month field value.

Usage

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  w w .  ja va 2s  .  co  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.frontend.pages.periods.PeriodPage.java

License:Apache License

public PeriodPage(final Period period) {
    super(UserLevel.TEACHER, true);

    add(new Label("editPeriodTitle", TeachUsSession.get().getString("PeriodPage.editForm"))); //$NON-NLS-1$ //$NON-NLS-2$

    final FormPanel form = new FormPanel("form"); //$NON-NLS-1$
    add(form);/*from   w  w w.j ava2 s.com*/

    // Name
    final StringTextFieldElement nameElement = new StringTextFieldElement(
            TeachUsSession.get().getString("General.name"), new PropertyModel<String>(period, "name"), true); //$NON-NLS-1$ //$NON-NLS-2$
    nameElement.add(StringValidator.maximumLength(100));
    nameElement.setReadOnly(period.getStatus() != Status.DRAFT);
    form.addElement(nameElement);

    // Begin date
    final DateElement beginDateElement = new DateElement(TeachUsSession.get().getString("General.startDate"), //$NON-NLS-1$
            new PropertyModel<DateMidnight>(period, "beginDate")); //$NON-NLS-1$
    beginDateElement.setReadOnly(period.getStatus() != Status.DRAFT);
    form.addElement(beginDateElement);

    // End date
    final DateElement endDateElement = new DateElement(TeachUsSession.get().getString("General.endDate"), //$NON-NLS-1$
            new PropertyModel<DateMidnight>(period, "endDate")); //$NON-NLS-1$
    endDateElement.add(new IValidator<DateMidnight>() {
        private static final long serialVersionUID = 1L;

        public void validate(IValidatable<DateMidnight> validatable) {
            DateMidnight date = validatable.getValue();
            if (date != null) {
                // Check if the end date conflicts with some bookings
                if (period.getId() != null) {
                    BookingDAO bookingDAO = TeachUsApplication.get().getBookingDAO();
                    DateTime lastBookingDate = bookingDAO.getLastBookingDate(period);
                    if (lastBookingDate != null) {
                        if (date.isBefore(lastBookingDate)) {
                            ValidationError validationError = new ValidationError();
                            String bookingConflictMessage = TeachUsSession.get()
                                    .getString("PeriodPage.endDateBookingConflict");
                            bookingConflictMessage = bookingConflictMessage.replace("${lastBookingDate}",
                                    Formatters.getFormatPrettyDate().print(lastBookingDate));
                            validationError.setMessage(bookingConflictMessage); //$NON-NLS-1$
                            validatable.error(validationError);
                        }
                    }
                }
            }
        }
    });
    form.addElement(endDateElement);

    // Time elements
    final List<Integer> hours = new ArrayList<Integer>();
    DateTime dt = new DateTime().withTime(0, 0, 0, 0);
    final int day = dt.getDayOfMonth();
    while (day == dt.getDayOfMonth()) {
        hours.add(dt.getMinuteOfDay());
        dt = dt.plusMinutes(30);
    }

    final TimeChoiceRenderer<Integer> timeChoiceRenderer = new TimeChoiceRenderer<Integer>();

    // Start time
    final DropDownElement<Integer> startTimeElement = new DropDownElement<Integer>(
            TeachUsSession.get().getString("General.startTime"), new TimeModel(new PropertyModel<LocalTime>( //$NON-NLS-1$
                    period, "startTime")), //$NON-NLS-1$
            hours, timeChoiceRenderer, true);
    startTimeElement.setReadOnly(period.getStatus() != Status.DRAFT);
    form.addElement(startTimeElement);

    // End time
    final DropDownElement<Integer> endTimeElement = new DropDownElement<Integer>(
            TeachUsSession.get().getString("General.endTime"), //$NON-NLS-1$
            new TimeModel(new PropertyModel<LocalTime>(period, "endTime")),
            hours, timeChoiceRenderer, true);
    endTimeElement.setReadOnly(period.getStatus() != Status.DRAFT);
    form.addElement(endTimeElement);

    // Location
    final StringTextFieldElement locationElement = new StringTextFieldElement(
            TeachUsSession.get().getString("General.location"), new PropertyModel<String>(period, "location")); //$NON-NLS-1$ //$NON-NLS-2$
    locationElement.add(StringValidator.maximumLength(100));
    locationElement.setReadOnly(period.getStatus() != Status.DRAFT);
    form.addElement(locationElement);

    // Price
    final DecimalFieldElement priceElement = new DecimalFieldElement(
            TeachUsSession.get().getString("General.price"), new PropertyModel<Double>(period, "price"), 6); //$NON-NLS-1$ //$NON-NLS-2$
    priceElement.setReadOnly(period.getStatus() != Status.DRAFT);
    priceElement.setDefaultNullValue(0.0);
    form.addElement(priceElement);

    // Lesson duration
    final IntegerFieldElement lessonDurationElement = new IntegerFieldElement(
            TeachUsSession.get().getString("General.lessonDuration"), new PropertyModel<Integer>( //$NON-NLS-1$
                    period, "lessonDuration"), //$NON-NLS-1$
            true, 4);
    lessonDurationElement.setReadOnly(period.getStatus() != Status.DRAFT);
    form.addElement(lessonDurationElement);

    // Interval Between Lesson Start
    final IntegerFieldElement intervalBetweenLessonStartElement = new IntegerFieldElement(
            TeachUsSession.get().getString("General.intervalBetweenLessonStart"), //$NON-NLS-1$
            new PropertyModel<Integer>(period, "intervalBetweenLessonStart"), true, 4); //$NON-NLS-1$
    intervalBetweenLessonStartElement.setReadOnly(period.getStatus() != Status.DRAFT);
    form.addElement(intervalBetweenLessonStartElement);

    // Week days
    final CheckGroupElement<WeekDay> weekDaysElement = new CheckGroupElement<WeekDay>(
            TeachUsSession.get().getString("General.weekDays"), new PropertyModel<List<WeekDay>>(period, //$NON-NLS-1$
                    "weekDays"), //$NON-NLS-1$
            Arrays.asList(WeekDay.values()), new WeekDayChoiceRenderer(Format.LONG), true);
    weekDaysElement.setReadOnly(period.getStatus() != Status.DRAFT);
    form.addElement(weekDaysElement);

    // Repeat every week
    final IntegerFieldElement repeatEveryWeekElement = new IntegerFieldElement(
            TeachUsSession.get().getString("General.repeatEveryWeek"), //$NON-NLS-1$
            new PropertyModel<Integer>(period, "repeatEveryWeek")); //$NON-NLS-1$
    repeatEveryWeekElement.setReadOnly(period.getStatus() != Status.DRAFT);
    //      repeatEveryWeekElement.setDefaultNullValue(1);
    form.addElement(repeatEveryWeekElement);

    // Status
    final List<Status> statusList = Arrays.asList(Status.values());
    final DropDownElement<Status> statusElement = new DropDownElement<Status>(
            TeachUsSession.get().getString("General.status"), new PropertyModel<Status>(period, "status"), //$NON-NLS-1$//$NON-NLS-2$
            statusList, new PeriodStatusRenderer());
    statusElement.setReadOnly(period.getStatus() != Status.DRAFT);
    form.addElement(statusElement);

    // Buttons
    form.addElement(new ButtonPanelElement() {
        private static final long serialVersionUID = 1L;

        @Override
        protected List<IButton> getAdditionalButtons() {
            final List<IButton> buttons = new ArrayList<IButton>();
            buttons.add(new IButton() {
                private static final long serialVersionUID = 1L;

                public String getValue() {
                    return TeachUsSession.get().getString("General.preview"); //$NON-NLS-1$
                }

                public void onClick(final AjaxRequestTarget target) {
                    final WebMarkupContainer preview = generatePreview(period);
                    PeriodPage.this.replace(preview);
                    target.add(preview);
                }
            });
            return buttons;
        }

        @Override
        protected void onCancel() {
            getRequestCycle().setResponsePage(PeriodsPage.class);
        }

        @Override
        protected void onSave(final AjaxRequestTarget target) {
            final PeriodDAO periodDAO = TeachUsApplication.get().getPeriodDAO();

            periodDAO.save(period);

            getRequestCycle().setResponsePage(PeriodsPage.class);
        }
    });

    add(new Label("previewTitle", TeachUsSession.get().getString("General.preview"))); //$NON-NLS-1$ //$NON-NLS-2$

    if (period.getId() != null) {
        add(generatePreview(period));
    } else {
        add(new WebComponent("calendar").setOutputMarkupId(true).setOutputMarkupPlaceholderTag(true)
                .setVisible(false));
    }
}

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  v  a 2  s.com
    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  w  ww. jav  a  2 s .com*/
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.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  www .j  a v  a 2 s  . c o m*/
  * @return
  */
public static TimexChunk ModifiedRule(DateTime start, TemporalPhrase temporalPhrase) {
    String phrase = temporalPhrase.getPhrase();
    phrase = phrase.trim();

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

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

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

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

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

    }

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

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

    }

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

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

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

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

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

        phrase = group2 + " " + group1;

    }

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

                    preflag = 1;
                }
            }

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

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

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

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

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

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

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

                }

            }

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

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

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

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

                        if (flagbefore == 1) {

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

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

                    else if (preflag == 2) {

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

                }
            }

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

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

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

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

                }

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

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

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

                }

            }

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

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

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

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

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

                }

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

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

                }
            }

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

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

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

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

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

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

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

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

                    }
                    return tc;
                }

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

                    else if (preflag == 3) {

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

                    }
                    return tc;
                }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

                    else {
                        return null;
                    }

                }
            }

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

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

                    }

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

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

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

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

                    else if (preflag == 3) {

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

                    }

                    return tc;
                }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

                    else {
                        return null;
                    }

                }

            }

        }

    }
    return null;

}

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

License:Open Source License

/**
 * This functions deals with special terms like today, tomorrow, and yesterday
 * @param start anchor time of the Phrase
 * @param phrase/*from   ww  w .j  a  va2  s  .  co m*/
  * @return
  */
public static TimexChunk Ordinaryrule(DateTime start, String phrase) {
    int numterm = 0;
    int i;
    int year;
    int month;
    int day;
    DateTime finish;
    String temp1;
    String temp2;
    Interval interval;
    interval = new Interval(start, start);
    phrase = phrase.toLowerCase();
    String patternStr = "(?:the)?\\s*(?:day)?\\s*(before|after|since)?\\s*(today|tomorrow|yesterday)\\s*";
    Pattern pattern = Pattern.compile(patternStr);
    Matcher matcher = pattern.matcher(phrase);
    boolean matchFound = matcher.find();
    TimexChunk tc = new TimexChunk();
    tc.addAttribute(TimexNames.type, TimexNames.DATE);
    DateTimeFormatter fmt = DateTimeFormat.forPattern("yyyy-MM-dd");

    if (matchFound) {
        for (i = 1; i <= 2; i++) {
            numterm++;
            if (matcher.group(i) == null) {
                numterm--;
            }
        }

        if (numterm == 2) {

            temp1 = matcher.group(1);
            temp2 = matcher.group(2);
            if (temp1.equals("before")) {
                if (temp2.equals("today")) {
                    day = start.getDayOfMonth();
                    month = start.getMonthOfYear();
                    year = start.getYear();
                    start = new DateTime(0, 1, 1, 0, 0, 0, 0);
                    finish = new DateTime(year, month, day, 23, 59, 59, 59);
                    tc.addAttribute(TimexNames.value, fmt.print(finish));
                    tc.addAttribute(TimexNames.mod, TimexNames.BEFORE);
                    return tc;
                }

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

                }

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

            else if (temp1.equals("after")) {
                if (temp2.equals("today")) {
                    //start = start.minusDays(-1);
                    day = start.getDayOfMonth();
                    month = start.getMonthOfYear();
                    year = start.getYear();
                    start = new DateTime(year, month, day, 0, 0, 0, 0);
                    finish = new DateTime(9999, 12, 31, 23, 59, 59, 59);
                    tc.addAttribute(TimexNames.value, fmt.print(start));
                    tc.addAttribute(TimexNames.mod, TimexNames.AFTER);
                    return tc;
                }

                else if (temp2.equals("tomorrow")) {
                    start = start.minusDays(-1);
                    day = start.getDayOfMonth();
                    month = start.getMonthOfYear();
                    year = start.getYear();
                    start = new DateTime(year, month, day, 0, 0, 0, 0);
                    finish = new DateTime(9999, 12, 31, 23, 59, 59, 59);
                    tc.addAttribute(TimexNames.value, fmt.print(start));
                    tc.addAttribute(TimexNames.mod, TimexNames.AFTER);
                    return tc;

                }

                else if (temp2.equals("yesterday")) {
                    day = start.getDayOfMonth();
                    month = start.getMonthOfYear();
                    year = start.getYear();
                    start = new DateTime(year, month, day - 1, 0, 0, 0, 0);
                    finish = new DateTime(9999, 12, 31, 23, 59, 59, 59);
                    tc.addAttribute(TimexNames.value, fmt.print(start));
                    tc.addAttribute(TimexNames.mod, TimexNames.AFTER);
                    return tc;
                }
            }

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

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

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

        else if (numterm == 1) {

            temp1 = matcher.group(2);
            if (temp1.equals("today")) {
                day = start.getDayOfMonth();
                month = start.getMonthOfYear();
                year = start.getYear();
                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 (temp1.equals("tomorrow")) {
                start = start.minusDays(-1);
                day = start.getDayOfMonth();
                month = start.getMonthOfYear();
                year = start.getYear();
                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 (temp1.equals("yesterday")) {
                start = start.minusDays(1);
                day = start.getDayOfMonth();
                month = start.getMonthOfYear();
                year = start.getYear();
                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;
            }
        }
    }
    return null;
}

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

License:Open Source License

/**
 * This function deals with a period of time with format the xxth day/month, etc
 * @param start the anchor time//from   w w w.  ja v  a 2  s. c o m
 * @param temporalPhrase
  * @return
  */
public static TimexChunk Periodrule(DateTime start, TemporalPhrase temporalPhrase) {

    int year;
    DateTime finish;
    String temp1;
    String temp2;
    Interval interval;
    interval = new Interval(start, start);
    String phrase = temporalPhrase.getPhrase();
    phrase = phrase.toLowerCase();
    DateTimeFormatter fmt = DateTimeFormat.forPattern("yyyy-MM-dd");

    int modiword = 0;// 0 :no modified words 1:early,ealier 2:late,later
    // Handle some special cases
    TimexChunk tc = new TimexChunk();
    tc.addAttribute(TimexNames.type, TimexNames.DATE);
    if (phrase.contains("now") || phrase.contains("currently") || phrase.contains("current")
            || phrase.contains("today")) {
        DateTime virtualStart = interval.getStart();
        virtualStart = new DateTime(virtualStart.getYear(), virtualStart.getMonthOfYear(),
                virtualStart.getDayOfMonth(), virtualStart.getHourOfDay(), virtualStart.getMinuteOfHour(),
                virtualStart.getSecondOfMinute(), virtualStart.getMillisOfSecond() + 1);
        tc.addAttribute(TimexNames.value, TimexNames.PRESENT_REF);
        return tc;
    }
    if (phrase.contains("early") || phrase.contains("earlier")) {
        modiword = 1;
    }
    if (phrase.contains("late") || phrase.contains("later")) {
        modiword = 2;
    }

    String units = "";

    for (String unitStr : dateUnitSet) {
        units = units + unitStr + "|";
    }
    units += "s$";

    String patternStr = "(?:the)?\\s*(\\d{1,4})(?:th|nd|st|rd)\\s*(" + units + ")\\s*";
    Pattern pattern = Pattern.compile(patternStr);
    Matcher matcher = pattern.matcher(phrase);
    boolean matchFound = matcher.find();
    if (matchFound) {
        temp1 = matcher.group(1);
        temp2 = matcher.group(2);

        String residual = StringUtils.difference(matcher.group(0), phrase);
        String anchorStr = "";
        if (residual.length() > 0) {
            TemporalPhrase anchorPhrase = new TemporalPhrase(residual, temporalPhrase.getTense());
            TimexChunk anchorTimex = TimexNormalizer.normalize(anchorPhrase);
            if (anchorTimex != null) {
                anchorStr = anchorTimex.getAttribute(TimexNames.value);
            }
        }

        if (temp2.equals("century")) {
            year = (Integer.parseInt(temp1) - 1) * 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")) {
            // e.g.: 3rd decade (of this century)
            // first we get this century is 20, then the 3rd decade is 203
            int anchorCentury = start.getCenturyOfEra();
            String val = String.valueOf(anchorCentury * 10 + temp1);
            tc.addAttribute(TimexNames.value, String.valueOf(val));
            return tc;
        }

        else if (temp2.equals("year")) {
            int anchorCentury = start.getCenturyOfEra();
            String val = String.valueOf(anchorCentury * 100 + temp1);
            tc.addAttribute(TimexNames.value, String.valueOf(val));
            return tc;
        }

        else if (temp2.equals("quarter")) {
            int anchorYear = start.getYear();
            String val = String.valueOf(anchorYear) + "-Q" + temp1;
            tc.addAttribute(TimexNames.value, String.valueOf(val));
            return tc;
        }

        else if (temp2.equals("month")) {
            int anchorYear = start.getYear();
            String monthStr = Integer.parseInt(temp1) < 10 ? "0" + temp1 : temp1;
            String val = String.valueOf(anchorYear) + "-" + monthStr;
            tc.addAttribute(TimexNames.value, String.valueOf(val));
            return tc;
        }

        else if (temp2.equals("day")) {
            String val = "";
            if (anchorStr.length() > 0) {
                List<String> normTimexList = Period.normTimexToList(anchorStr);
                String anchorYear = normTimexList.get(0);
                String anchorDate;
                String anchorMonth;
                if (normTimexList.size() == 1 || Integer.parseInt(temp1) > 31) {
                    anchorMonth = "01";
                } else {
                    anchorMonth = normTimexList.get(1);
                }
                DateTime normDateTime = new DateTime(Integer.parseInt(anchorYear),
                        Integer.parseInt(anchorMonth), 1, 0, 0);
                normDateTime = normDateTime.minusDays(-1 * Integer.parseInt(temp1));
                anchorYear = String.valueOf(normDateTime.getYear());
                anchorMonth = String.valueOf(normDateTime.getMonthOfYear());
                anchorDate = String.valueOf(normDateTime.getDayOfMonth());
                anchorMonth = anchorMonth.length() == 1 ? "0" + anchorMonth : anchorMonth;
                anchorDate = anchorDate.length() == 1 ? "0" + anchorDate : anchorDate;
                val = anchorYear + "-" + anchorMonth + "-" + anchorDate;

            } else {
                int month = Integer.parseInt(temp1) > 31 ? 1 : start.getMonthOfYear();
                DateTime normDateTime = new DateTime(start.getYear(), month, 1, 0, 0);
                normDateTime = normDateTime.minusDays(-1 * Integer.parseInt(temp1));
                String anchorYear = String.valueOf(normDateTime.getYear());
                String anchorMonth = String.valueOf(normDateTime.getMonthOfYear());
                String anchorDate = String.valueOf(normDateTime.getDayOfMonth());
                anchorMonth = anchorMonth.length() == 1 ? "0" + anchorMonth : anchorMonth;
                anchorDate = anchorDate.length() == 1 ? "0" + anchorDate : anchorDate;
                val = String.valueOf(anchorYear) + "-" + anchorMonth + "-" + anchorDate;
            }
            tc.addAttribute(TimexNames.value, String.valueOf(val));
            return tc;
        }

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

            if (Integer.parseInt(temp1) < 100) {
                year = start.getCenturyOfEra();
                year = year * 100 + Integer.parseInt(temp1);
                if (modiword == 0) {
                    tc.addAttribute(TimexNames.value, String.valueOf(year / 10));
                }

                else if (modiword == 1) {
                    tc.addAttribute(TimexNames.value, String.valueOf(year / 10));
                    tc.addAttribute(TimexNames.mod, TimexNames.START);
                }

                else if (modiword == 2) {
                    tc.addAttribute(TimexNames.value, String.valueOf(year / 10));
                    tc.addAttribute(TimexNames.mod, TimexNames.END);
                }

                return tc;
            }

            else {
                if (modiword == 0) {
                    start = new DateTime(Integer.parseInt(temp1), 1, 1, 0, 0, 0, 0);
                    finish = new DateTime(Integer.parseInt(temp1) + 9, 12, 31, 23, 59, 59, 59);
                    tc.addAttribute(TimexNames.value, String.valueOf(finish.getYear() / 10));
                }

                else if (modiword == 1) {
                    start = new DateTime(Integer.parseInt(temp1), 1, 1, 0, 0, 0, 0);
                    finish = new DateTime(Integer.parseInt(temp1) + 3, 12, 31, 23, 59, 59, 59);
                    tc.addAttribute(TimexNames.value, String.valueOf(finish.getYear() / 10));
                    tc.addAttribute(TimexNames.mod, TimexNames.START);
                }

                else if (modiword == 2) {
                    start = new DateTime(Integer.parseInt(temp1) + 7, 1, 1, 0, 0, 0, 0);
                    finish = new DateTime(Integer.parseInt(temp1) + 9, 12, 31, 23, 59, 59, 59);
                    tc.addAttribute(TimexNames.value, String.valueOf(finish.getYear() / 10));
                    tc.addAttribute(TimexNames.mod, TimexNames.END);
                }
                return tc;

            }
        }

    }
    return null;
}

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

License:Open Source License

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

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

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

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

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

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

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

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

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

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

    }

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

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

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

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

                    }

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

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

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

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

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

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

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

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

                }

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

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

                    }

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

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

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

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

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

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

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

                }

            }

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

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

                }

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

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

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

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

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

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

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

            }

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

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

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

                }

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

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

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

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

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

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

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

            }

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

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

                }

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

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

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

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

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

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

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

            }
        }
    }
    return null;
}

From source file:edu.wpi.cs.wpisuitetng.modules.cal.ui.views.month.MonthDay.java

License:Open Source License

public MonthDay(DateTime initDay, DayStyle style, final MonthCalendar parent) {
    this.day = initDay;
    this.parent = parent;
    this.style = style;
    Color grayit = Colors.TABLE_GRAY_HEADER, textit = Colors.TABLE_TEXT, bg = Colors.TABLE_BACKGROUND;
    switch (style) {
    case Normal://from  ww w . j  av  a  2s. com
        grayit = Colors.TABLE_GRAY_HEADER;
        textit = Colors.TABLE_GRAY_TEXT;
        break;
    case OutOfMonth:
        grayit = bg;
        break;
    case Today:
        grayit = Colors.TABLE_GRAY_HEADER;
        textit = Colors.TABLE_GRAY_TEXT;
        break;
    default:
        throw new IllegalStateException("DayStyle is not a valid DayStyle!");
    }
    setBackground(bg);
    setForeground(textit);
    borderTop = grayit.equals(bg);
    setLayout(new javax.swing.BoxLayout(this, javax.swing.BoxLayout.Y_AXIS));

    header.setBackground(grayit);
    header.setForeground(textit);
    header.setFont(new java.awt.Font("DejaVu Sans", style == DayStyle.Today ? Font.BOLD : Font.PLAIN, 12));
    header.setHorizontalAlignment(javax.swing.SwingConstants.RIGHT);
    header.setText(Integer.toString(initDay.getDayOfMonth()));
    header.setAutoscrolls(true);
    header.setBorder(javax.swing.BorderFactory.createEmptyBorder(1, 1, 1, 1));
    header.setMaximumSize(new java.awt.Dimension(10000, 17));
    header.setOpaque(true);

    if (style == DayStyle.Today) {
        Font font = header.getFont();
        Map attributes = font.getAttributes();
        attributes.put(TextAttribute.UNDERLINE, TextAttribute.UNDERLINE_ON);
        header.setFont(font.deriveFont(attributes));
    }

    add(header);

    addMouseListener(new MouseListener() {
        @Override
        public void mousePressed(MouseEvent e) {
            parent.dispatchEvent(e);
            MainPanel.getInstance().setSelectedDay(day);
            MainPanel.getInstance().clearSelected();
            parent.setEscaped(false);
        }

        @Override
        public void mouseClicked(MouseEvent e) {

        }

        @Override
        public void mouseReleased(MouseEvent e) {
            if (parent.isEscaped()) {
                MonthDay releasedDay = parent.getMonthDayAtCursor();
                Displayable selected = MainPanel.getInstance().getSelectedEvent();
                if (selected != null) {
                    MutableDateTime newTime = new MutableDateTime(selected.getStart());

                    newTime.setYear(releasedDay.day.getYear());
                    newTime.setDayOfYear(releasedDay.day.getDayOfYear());

                    selected.setTime(newTime.toDateTime());

                    selected.update();
                }
            }
            parent.dispatchEvent(e);
        }

        @Override
        public void mouseEntered(MouseEvent e) {
            parent.dispatchEvent(e);
        }

        @Override
        public void mouseExited(MouseEvent e) {
            setBackground(Colors.TABLE_BACKGROUND);
            parent.setEscaped(true);

        }
    });

    header.addMouseListener(new MouseListener() {

        @Override
        public void mousePressed(MouseEvent e) {
            MainPanel.getInstance().setSelectedDay(day);
            MainPanel.getInstance().clearSelected();
        }

        @Override
        public void mouseClicked(MouseEvent e) {
            MainPanel.getInstance().miniMove(day);
            MainPanel.getInstance().viewDay();
        }

        @Override
        public void mouseReleased(MouseEvent e) {
        }

        @Override
        public void mouseEntered(MouseEvent e) {
        }

        @Override
        public void mouseExited(MouseEvent e) {
            setBackground(Colors.TABLE_BACKGROUND);
        }
    });

    addMouseMotionListener(new MouseMotionListener() {

        @Override
        public void mouseDragged(MouseEvent e) {
            parent.repaint();
            parent.dispatchEvent(e);
        }

        @Override
        public void mouseMoved(MouseEvent e) {
            parent.dispatchEvent(e);
        }

    });
}