List of usage examples for org.joda.time DateTime minusSeconds
public DateTime minusSeconds(int seconds)
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; }