Example usage for org.joda.time DateTime minusSeconds

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

Introduction

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

Prototype

public DateTime minusSeconds(int seconds) 

Source Link

Document

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

Usage

From source file:com.vmware.demo.SamlGenerator.java

License:Open Source License

/**
 * Generate a Saml assertion for the given audienct, recipient and destination.
 * The attributes and remote user will be present in the assertion.
 *
 * @param samlAttributes to include in the Saml assertion
 * @param remoteUser is the username as passed in assertion, cannot be null
 *//*  w  w w .j  a v a2s.  co m*/
public String generateSaml(String remoteUser, List<SamlAttribute> samlAttributes, String responseId,
        String audienceUri, String recipient, String destination, boolean signResponse, boolean signAssertion,
        boolean issuerInAssertion) throws SamlException {

    DateTime now = new DateTime();

    Assertion assertion = assertionBuilder.buildObject();
    assertion.setVersion(SAMLVersion.VERSION_20);

    if (null == remoteUser) {
        throw new SamlException("Remote user cannot be null when generating assertion.");
    }

    // Generate a new random id
    assertion.setID(idGenerator.generateIdentifier());
    assertion.setIssueInstant(now);

    // Set issuer
    Issuer issuer = issuerBuilder.buildObject();
    issuer.setValue(issuerName);

    // Issuer can be forced into assertion, or is automatically included if not signing response
    if (!signResponse || issuerInAssertion) {
        assertion.setIssuer(issuer);
    }

    AuthnStatement authnStmt = authnStatementBuilder.buildObject();
    authnStmt.setAuthnInstant(now);
    authnStmt.setSessionIndex(idGenerator.generateIdentifier());
    AuthnContext authnContext = (AuthnContext) buildXMLObject(AuthnContext.DEFAULT_ELEMENT_NAME);
    AuthnContextClassRef classRef = (AuthnContextClassRef) buildXMLObject(
            AuthnContextClassRef.DEFAULT_ELEMENT_NAME);
    classRef.setAuthnContextClassRef(AuthnContext.PPT_AUTHN_CTX);
    authnContext.setAuthnContextClassRef(classRef);
    authnStmt.setAuthnContext(authnContext);
    assertion.getAuthnStatements().add(authnStmt);
    NameID nameID = nameIDBuilder.buildObject();
    nameID.setNameQualifier(idpMetaDataURL);
    nameID.setValue(remoteUser);
    nameID.setFormat(SAML_NAMEID_FORMAT);
    Subject subject = (Subject) buildXMLObject(Subject.DEFAULT_ELEMENT_NAME);
    subject.setNameID(nameID);
    assertion.setSubject(subject);

    AttributeStatement attributeStatement = (AttributeStatement) buildXMLObject(
            AttributeStatement.DEFAULT_ELEMENT_NAME);
    for (SamlAttribute samlAttribute : samlAttributes) {
        Attribute attribute = (Attribute) buildXMLObject(Attribute.DEFAULT_ELEMENT_NAME);
        attribute.setName(samlAttribute.getName());
        attribute.setNameFormat(Attribute.BASIC);
        for (String value : samlAttribute.getValues()) {
            XSString xss = (XSString) stringBuilder.buildObject(AttributeValue.DEFAULT_ELEMENT_NAME,
                    XSString.TYPE_NAME);
            xss.setValue(value);
            attribute.getAttributeValues().add(xss);
        }
        attributeStatement.getAttributes().add(attribute);
    }
    assertion.getAttributeStatements().add(attributeStatement);

    Audience audience = (Audience) buildXMLObject(Audience.DEFAULT_ELEMENT_NAME);
    audience.setAudienceURI(audienceUri);

    AudienceRestriction ar = (AudienceRestriction) buildXMLObject(AudienceRestriction.DEFAULT_ELEMENT_NAME);
    ar.getAudiences().add(audience);

    Conditions conditions = (Conditions) buildXMLObject(Conditions.DEFAULT_ELEMENT_NAME);
    conditions.getAudienceRestrictions().add(ar);
    conditions.setNotBefore(now.minusSeconds(SAML_DRIFT));
    conditions.setNotOnOrAfter(now.plusSeconds(SAML_VALIDITY));

    assertion.setConditions(conditions);
    SubjectConfirmation subjConf = subjConfBuilder.buildObject();
    subjConf.setMethod(SUBJCONF_METHOD);
    QName qname = new QName(SAMLConstants.SAML20_NS, SubjectConfirmationData.DEFAULT_ELEMENT_LOCAL_NAME,
            SAMLConstants.SAML20_PREFIX);
    SubjectConfirmationData subjectCD = (SubjectConfirmationData) buildXMLObject(qname);
    subjectCD.setRecipient(recipient);
    subjectCD.setNotOnOrAfter(now.plusSeconds(SAML_VALIDITY));
    //see if this saml is in response to an authnrequest
    if (responseId != null) {
        subjectCD.setInResponseTo(responseId);
    }
    subjConf.setSubjectConfirmationData(subjectCD);
    assertion.getSubject().getSubjectConfirmations().add(subjConf);

    Response response = (Response) buildXMLObject(Response.DEFAULT_ELEMENT_NAME);
    Status status = (Status) buildXMLObject(Status.DEFAULT_ELEMENT_NAME);
    StatusCode statusCode = (StatusCode) buildXMLObject(StatusCode.DEFAULT_ELEMENT_NAME);
    statusCode.setValue(StatusCode.SUCCESS_URI);
    status.setStatusCode(statusCode);
    response.setStatus(status);
    response.setID(idGenerator.generateIdentifier());
    response.setIssueInstant(now);
    if (responseId != null) {
        response.setInResponseTo(responseId);
    }

    if (null != destination) {
        response.setDestination(destination);
    }

    Marshaller marshaller = null;
    if (signAssertion) {
        Signature signature = signatureBuilder.buildObject();
        signature.setSigningCredential(basicCredential);
        signature.setCanonicalizationAlgorithm(CANON_ALGORITHM);
        signature.setSignatureAlgorithm(SIGNATURE_METHOD);

        assertion.setSignature(signature);

        marshaller = marshallerFactory.getMarshaller(assertion);
        try {
            marshaller.marshall(assertion);
        } catch (MarshallingException e) {
            throw new SamlException("Failed to marshall assertion.", e);
        }

        try {
            Signer.signObject(signature);
        } catch (SignatureException e) {
            throw new SamlException("Failed to sign assertion.", e);
        }

        response.getAssertions().add(assertion);
    }

    if (signResponse) {
        Signature signature = signatureBuilder.buildObject();
        signature.setSigningCredential(basicCredential);
        signature.setCanonicalizationAlgorithm(CANON_ALGORITHM);
        signature.setSignatureAlgorithm(SIGNATURE_METHOD);

        // Allow issuer to be in the response, if forced
        // (e.g. don't put the issuer in the response, per the SAML spec, if the override says put it in the assertion)
        if (!issuerInAssertion) {
            response.setIssuer(issuer);
        }

        response.getAssertions().add(assertion);
        response.setSignature(signature);

        marshaller = marshallerFactory.getMarshaller(response);
        try {
            marshaller.marshall(response);
        } catch (MarshallingException e) {
            throw new SamlException("Failed to marshall response.", e);
        }

        try {
            Signer.signObject(signature);
        } catch (SignatureException e) {
            throw new SamlException("Failed to sign response.", e);
        }
    }

    marshaller = marshallerFactory.getMarshaller(response);
    Element messageDOM = null;
    try {
        messageDOM = marshaller.marshall(response);
    } catch (MarshallingException e) {
        throw new SamlException("Failed to re-marshall response.", e);
    }
    StringWriter writer = new StringWriter();
    XMLHelper.writeNode(messageDOM, writer);

    return Base64.encodeBytes(writer.toString().getBytes(SamlGenerator.CHARSET_UTF8), Base64.DONT_BREAK_LINES);
}

From source file:ddf.catalog.source.solr.provider.SolrProviderTestBase.java

License:Open Source License

Date dateBeforeNow(DateTime now) {
    return now.minusSeconds(A_LITTLE_WHILE).toDate();
}

From source file:ddf.catalog.source.solr.provider.SolrProviderTestUtil.java

License:Open Source License

public static Date dateBeforeNow(DateTime now) {
    return now.minusSeconds(A_LITTLE_WHILE).toDate();
}

From source file:ddf.catalog.source.solr.SolrProviderTestCase.java

License:Open Source License

protected Date dateBeforeNow(DateTime now) {
    return now.minusSeconds(A_LITTLE_WHILE).toDate();
}

From source file:de.rwth.idsg.xsharing.router.core.routing.util.MinimalRouteFactory.java

License:Open Source License

public static RouteMinimalRepresentation getMinRep(GeoCoord from, GeoCoord to, DateTime time, boolean isArrival,
        RouteContext sm) {/*from w  w  w.  j  a v a  2  s  . c o m*/
    List<RouteLegWrapper> legs = sm.getLegs();

    if (checkNullOrEmpty(legs)) {
        return null;
    }

    RouteMinimalRepresentation route = new RouteMinimalRepresentation();
    route.setFrom(from);
    route.setTo(to);
    route.setTotalDurationCached(sm.getTotalDurationInSeconds());
    route.setTotalDistance(sm.getTotalDistance());

    LinkedList<LegMinimalRepresentation> legList = new LinkedList<>();
    for (RouteLegWrapper l : legs) {
        legList.add(getSingleLeg(l));
    }
    route.setLegs(legList);
    route.setArrivalTime(isArrival);

    // internal duration in seconds !!!
    //
    if (isArrival) {
        route.setArrival(time);
        route.setDeparture(time.minusSeconds(route.getTotalDuration()));
    } else {
        route.setDeparture(time);
        route.setArrival(time.plusSeconds(route.getTotalDuration()));
    }
    return route;
}

From source file:de.rwth.idsg.xsharing.router.persistence.domain.routes.representation.factory.RouteRepresentationFactory.java

License:Open Source License

public static RouteMinimalRepresentation getMinRep(GeoCoord from, GeoCoord to, DateTime time, boolean isArrival,
        List<RouteLeg> legs) {
    if (checkNullOrEmpty(legs)) {
        return null;
    }//from   w ww .  j a  v  a2  s.  c om

    RouteMinimalRepresentation route = new RouteMinimalRepresentation();
    route.setFrom(from);
    route.setTo(to);

    LinkedList<LegMinimalRepresentation> legList = new LinkedList<>();
    for (RouteLeg l : legs) {
        legList.add(RouteLegFactory.getMinRep(l));
    }
    route.setLegs(legList);
    route.setArrivalTime(isArrival);

    // internal duration in seconds !!!
    //
    if (isArrival) {
        route.setArrival(time);
        route.setDeparture(time.minusSeconds(route.getTotalDuration()));
    } else {
        route.setDeparture(time);
        route.setArrival(time.plusSeconds(route.getTotalDuration()));
    }
    return route;
}

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/* w  w  w.j a v  a  2  s . co  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.RelativeDate.java

License:Open Source License

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

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

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

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

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

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

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

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

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

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

    }

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

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

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

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

                    }

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

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

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

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

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

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

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

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

                }

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

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

                    }

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

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

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

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

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

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

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

                }

            }

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

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

                }

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

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

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

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

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

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

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

            }

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

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

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

                }

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

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

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

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

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

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

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

            }

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

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

                }

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

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

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

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

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

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

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

            }
        }
    }
    return null;
}

From source file:eu.europa.ec.fisheries.uvms.common.DateUtils.java

License:Open Source License

public static DateTime nowUTCMinusSeconds(final DateTime now, final Float hours)
        throws IllegalArgumentException {
    return now.minusSeconds((int) (hours * 3600));
}

From source file:net.sourceforge.fenixedu.presentationTier.Action.messaging.AnnouncementsStartPageHandler.java

License:Open Source License

private DateTime getStartDate(HttpServletRequest request) {

    final String selectedTimeSpanString = request.getParameter("recentBoardsTimeSpanSelection");
    final RecentBoardsTimeSpanSelection selectedTimeSpan = (selectedTimeSpanString != null)
            ? RecentBoardsTimeSpanSelection.valueOf(selectedTimeSpanString)
            : RecentBoardsTimeSpanSelection.TS_LAST_WEEK;

    final DateTime now = new DateTime();
    DateTime startDate = null;

    switch (selectedTimeSpan) {
    case TS_ALL_ACTIVE:
        break;//  ww w .ja v  a2 s .  co m
    case TS_LAST_WEEK:
        startDate = now.minusDays(7);
        break;
    case TS_ONE_MONTH:
        startDate = now.minusDays(30);
        break;
    case TS_TWO_MONTHS:
        startDate = now.minusDays(60);
        break;
    case TS_TODAY:
        startDate = now.minusHours(now.hourOfDay().get());
        startDate = startDate.minusMinutes(now.minuteOfHour().get());
        startDate = startDate.minusSeconds(now.secondOfMinute().get());
        break;
    case TS_TWO_WEEKS:
        startDate = now.minusDays(15);
        break;
    case TS_YESTERDAY:
        startDate = now.minusDays(1);
        break;
    }
    return startDate;
}