List of usage examples for org.joda.time DateTime getCenturyOfEra
public int getCenturyOfEra()
From source file:com.clevercloud.bianca.lib.date.DateModule.java
License:Open Source License
/** * Returns the parsed date./*www .j ava 2 s . c o m*/ */ public Value strptime(Env env, String date, String format) { ArrayValueImpl array = new ArrayValueImpl(); DateTimeFormatterBuilder fb = new DateTimeFormatterBuilder(); int length = format.length(); for (int i = 0; i < length; i++) { char ch = format.charAt(i); if (ch != '%') { fb.appendLiteral(ch); continue; } switch (format.charAt(++i)) { case 'a': fb.appendDayOfWeekShortText(); break; case 'A': fb.appendDayOfWeekText(); break; case 'h': case 'b': fb.appendMonthOfYearShortText(); ; break; case 'B': fb.appendMonthOfYearText(); break; // TODO: case 'c' case 'C': fb.appendCenturyOfEra(2, 2); break; case 'd': fb.appendDayOfMonth(2); break; case 'D': fb.appendMonthOfYear(2); fb.appendLiteral('/'); fb.appendDayOfMonth(2); fb.appendLiteral('/'); fb.appendYear(2, 2); break; // TODO: case 'e' case 'F': fb.appendYear(4, 4); fb.appendLiteral('-'); fb.appendMonthOfYear(2); fb.appendLiteral('-'); fb.appendDayOfMonth(2); break; // TODO: case 'g' // TODO: case 'G' case 'H': fb.appendHourOfDay(2); break; case 'I': fb.appendHourOfHalfday(2); break; case 'j': fb.appendDayOfYear(3); break; // TODO: case 'l' case 'm': fb.appendMonthOfYear(2); break; case 'M': fb.appendMinuteOfHour(2); break; case 'n': fb.appendLiteral("\n"); break; case 'p': case 'P': fb.appendHalfdayOfDayText(); break; case 'r': fb.appendHourOfHalfday(2); fb.appendLiteral(':'); fb.appendMinuteOfHour(2); fb.appendLiteral(':'); fb.appendSecondOfMinute(2); fb.appendLiteral(' '); fb.appendHalfdayOfDayText(); break; case 'R': fb.appendHourOfDay(2); fb.appendLiteral(':'); fb.appendMinuteOfHour(2); break; // TODO: case 's' case 'S': fb.appendSecondOfMinute(2); break; case 't': fb.appendLiteral("\t"); break; case 'T': fb.appendHourOfDay(2); fb.appendLiteral(':'); fb.appendMinuteOfHour(2); fb.appendLiteral(':'); fb.appendSecondOfMinute(2); break; // TODO: case 'u' // TODO: case 'U' // TODO: case 'V' // TODO: case 'w' // TODO: case 'W' // TODO: case 'x' // TODO: case 'X' case 'y': fb.appendYear(2, 2); break; case 'Y': fb.appendYear(4, 4); break; case 'z': fb.appendTimeZoneOffset(null, true, 2, 2); break; case 'Z': fb.appendTimeZoneName(); break; case '%': fb.appendLiteral('%'); break; default: fb.appendLiteral(ch); } } DateTimeFormatter dtf = fb.toFormatter().withLocale(Locale.getDefault()).withOffsetParsed(); org.joda.time.DateTime dt = new org.joda.time.DateTime(); String unparsed = ""; try { dt = dtf.parseDateTime(date); } catch (IllegalArgumentException e) { String delims = "[\"]+"; String[] splits = e.getMessage().split(delims); unparsed = unparsed.concat(splits[3]); } // According to manual strptime(3) if (dt.getCenturyOfEra() == 0) { if (dt.getYear() > 68) { dt = dt.withCenturyOfEra(19); } else { dt = dt.withCenturyOfEra(20); } } array.put("tm_sec", dt.getSecondOfMinute()); array.put("tm_min", dt.getMinuteOfHour()); array.put("tm_hour", dt.getHourOfDay()); array.put("tm_mday", dt.getDayOfMonth()); array.put("tm_mon", dt.getMonthOfYear() - 1); array.put("tm_year", dt.getYearOfCentury() + ((dt.getCenturyOfEra() - 19) * 100)); // Years since 1900 array.put("tm_wday", dt.getDayOfWeek() % 7); array.put("tm_yday", dt.getDayOfYear() - 1); array.put("unparsed", unparsed); return array; }
From source file:edu.illinois.cs.cogcomp.temporal.normalizer.main.timex2interval.ModifiedDate.java
License:Open Source License
/** * * @param start the start point (anchor time) of the Phrase * @param temporalPhrase//from ww w. j a v a 2 s. c o m * @return */ public static TimexChunk ModifiedRule(DateTime start, TemporalPhrase temporalPhrase) { String phrase = temporalPhrase.getPhrase(); phrase = phrase.trim(); // ###################################################preprocess // 1################################################ String preprocess = "\\A(" + timeofDay + "|" + modIndicator + ")\\s*(" + weekday + ")\\Z"; Pattern pattern11 = Pattern.compile(preprocess); Matcher matcher11 = pattern11.matcher(phrase); boolean matcher11Found = matcher11.find(); if (matcher11Found) { TimexChunk tc = new TimexChunk(); tc.addAttribute(TimexNames.type, TimexNames.DATE); String secondphrase = new String(); // split the Phrase into two parts // TODO: write converter to convert TIMEX3 to datepoint String firstphrase = "this" + matcher11.group(2); tc = ModifiedDate.ModifiedRule(start, new TemporalPhrase(firstphrase, temporalPhrase.getTense())); if (matcher11.group(1).contains("early") || matcher11.group(1).contains("earlier")) { tc.addAttribute(TimexNames.mod, TimexNames.START); } else if (matcher11.group(1).contains("late") || matcher11.group(1).contains("later")) { tc.addAttribute(TimexNames.mod, TimexNames.END); } else { secondphrase = matcher11.group(1); String revertStr = firstphrase + " " + secondphrase; temporalPhrase.setPhrase(revertStr); return ModifiedDate.ModifiedRule(start, temporalPhrase); } return tc; } // ###################################################preprocess // 2################################################ String ownprocess = "\\A(" + weekday + ")\\s*(" + timeofDay + ")\\Z"; Pattern pattern2 = Pattern.compile(ownprocess); Matcher matcher2 = pattern2.matcher(phrase); boolean matcher2Found = matcher2.find(); if (matcher2Found) { // split the Phrase into two parts String firstphrase = "this" + matcher2.group(1); String secondphrase = "this" + matcher2.group(2); TimexChunk keypoint = ModifiedDate.ModifiedRule(start, new TemporalPhrase(firstphrase, temporalPhrase.getTense())); String normVal = keypoint.getAttributes().get(TimexNames.value); DateTimeFormatter fmt = DateTimeFormat.forPattern("yyyy-MM-dd"); DateTime starttime = fmt.parseDateTime(normVal); TimexChunk result = ModifiedDate.ModifiedRule(starttime, new TemporalPhrase(secondphrase, temporalPhrase.getTense())); return result; } //String monther = "(?:jan(?:uary)?|feb(?:ruary)?|mar(?:ch)?|apr(?:il)?|may?|jun(?:e)?|jul(?:y)?|aug(?:ust)?|sept(?:ember)?|oct(?:ober)?|nov(?:ember)?|dec(?:ember)?|year)"; String monther = "(" + KnowledgeBase.monther + ")"; //String specialterm = "\\A(?:morning|afternoon|noon|evening|night|spring|fall|summer|winter|mon(?:day)?|tues(?:day)?|wed(?:nesday)?|thur(?:sday)?|fri(?:day)?|sat(?:urday)?|sun(?:day)?)\\Z"; String specialterm = "\\A(" + timeofDay + "|" + season + "|" + weekday + ")\\Z"; Pattern onepattern = Pattern.compile(specialterm); Matcher onematcher = onepattern.matcher(phrase); boolean onematchFound = onematcher.find(); if (onematchFound) { phrase = "this " + onematcher.group(0); } int numterm; DateMapping temp = DateMapping.getInstance(); int i; int dayweek; int year; int month = 1; int day; int flagbefore = -1; int flagafter = -1; String thisTimeOfDay = ""; int prematchDay = -1; DateTime finish; String temp1; String temp2; Interval interval; interval = new Interval(start, start); phrase = phrase.toLowerCase(); int preflag = -1; if (phrase.equals("tonight")) { phrase = "today night"; } if (phrase.contains("before")) { phrase = phrase.replaceAll("before", ""); phrase = phrase.trim(); flagbefore = 1; } if (phrase.contains("\\Aafter\\Z")) { phrase = phrase.replaceAll("after", ""); phrase = phrase.trim(); flagafter = 1; } String spepatternStr = "(" + timeofDay + "|" + season + "|" + weekday + ")\\s*(" + shiftIndicator + ")\\s*(" + dateUnit + ")"; Pattern spepattern = Pattern.compile(spepatternStr); Matcher spematcher = spepattern.matcher(phrase); boolean spematchFound = spematcher.find(); if (spematchFound) { String group1 = spematcher.group(1); String group2 = spematcher.group(2); // String group3 = spematcher.group(3); phrase = group2 + " " + group1; } String patternStr = "\\s*(" + shiftIndicator + "|" + modIndicator + "|" + specialDayTerm + ")\\s*(" + timeofDay + "|" + dateUnit + "|" + weekday + "|" + season + "|" + KnowledgeBase.monther + ")"; Pattern pattern = Pattern.compile(patternStr); Matcher matcher = pattern.matcher(phrase); boolean matchFound = matcher.find(); TimexChunk tc = new TimexChunk(); DateTimeFormatter fmt = DateTimeFormat.forPattern("yyyy-MM-dd"); DateTimeFormatter ymFmt = DateTimeFormat.forPattern("yyyy-MM"); DateTimeFormatter yFmt = DateTimeFormat.forPattern("yyyy"); if (matchFound) { for (i = 1; i <= 2; i++) { if (matcher.group(i) == null) { i--; break; } } if (i == 3) { i--; } numterm = i; if (numterm == 2) { // group(0) returns the whole detected string which matches the // pattern String origPhrase = phrase; phrase = phrase.replaceAll(matcher.group(0), ""); phrase = phrase.trim(); String prepatternStr = "(" + KnowledgeBase.monther + "|year)"; Pattern prepattern = Pattern.compile(prepatternStr); Matcher prematcher = prepattern.matcher(phrase); boolean prematchFound = prematcher.find(); if (prematchFound) { if (temp.hm.containsKey(prematcher.group(1))) { month = Integer.parseInt(temp.hm.get(prematcher.group(1))); preflag = 1; } } prepatternStr = "(\\d+)"; prepattern = Pattern.compile(prepatternStr); prematcher = prepattern.matcher(phrase); prematchFound = prematcher.find(); if (prematchFound) { int dayInt = Integer.parseInt(prematcher.group(1)); if (dayInt > 0 && dayInt < 32) { prematchDay = dayInt; preflag = 1; } } prepatternStr = "(" + weekday + ")"; prepattern = Pattern.compile(prepatternStr); prematcher = prepattern.matcher(phrase); prematchFound = prematcher.find(); if (prematchFound) { if (temp.hm.containsKey(prematcher.group(1))) { prematchDay = Integer.parseInt(temp.hm.get(prematcher.group(1))); preflag = 1; } } prepatternStr = "(" + timeofDay + ")"; prepattern = Pattern.compile(prepatternStr); prematcher = prepattern.matcher(phrase); prematchFound = prematcher.find(); if (prematchFound) { if (unitMap.containsKey(prematcher.group(1))) { thisTimeOfDay = unitMap.get(prematcher.group(1)); preflag = 1; } } else { String backPatt = "(early|earlier|begin(?:ing)?|start)"; Pattern backPa = Pattern.compile(backPatt); Matcher backmatcher = backPa.matcher(phrase); boolean backFound = backmatcher.find(); if (backFound) { // 2 means early preflag = 2; } else { String backPatter = "(late|later|end)"; Pattern backPater = Pattern.compile(backPatter); Matcher backmatch = backPater.matcher(phrase); boolean backFounder = backmatch.find(); if (backFounder) { // 3 means late preflag = 3; } } } temp1 = matcher.group(1); temp2 = matcher.group(2); if (temp1.equals("last") || temp1.equals("past") || temp1.equals("previous") || temp1.equals("yesterday")) { if (temp2.equals("year")) { finish = start.minusYears(1); year = finish.getYear(); if (preflag == 1) { if (flagbefore == 1) { finish = new DateTime(year, month, 1, 23, 59, 59, 59); finish = finish.minusDays(1); String normVal = fmt.print(finish); tc.addAttribute(TimexNames.type, TimexNames.DATE); tc.addAttribute(TimexNames.value, normVal); tc.addAttribute(TimexNames.mod, TimexNames.BEFORE); return tc; } else if (flagafter == 1) { finish = new DateTime(year, month, 1, 0, 0, 0, 0); finish = finish.dayOfMonth().withMaximumValue(); finish = finish.minusDays(-1); String normVal = fmt.print(finish); tc.addAttribute(TimexNames.type, TimexNames.DATE); tc.addAttribute(TimexNames.value, normVal); tc.addAttribute(TimexNames.mod, TimexNames.AFTER); return tc; } finish = new DateTime(year, month, 1, 23, 59, 59, 59); finish = finish.dayOfMonth().withMaximumValue(); String normVal = ymFmt.print(finish); tc.addAttribute(TimexNames.type, TimexNames.DATE); tc.addAttribute(TimexNames.value, normVal); return tc; } else if (preflag == 2) { tc.addAttribute(TimexNames.type, TimexNames.DATE); tc.addAttribute(TimexNames.value, String.valueOf(year)); tc.addAttribute(TimexNames.mod, TimexNames.START); return tc; } else if (preflag == 3) { tc.addAttribute(TimexNames.type, TimexNames.DATE); tc.addAttribute(TimexNames.value, String.valueOf(year)); tc.addAttribute(TimexNames.mod, TimexNames.END); return tc; } else { tc.addAttribute(TimexNames.type, TimexNames.DATE); tc.addAttribute(TimexNames.value, String.valueOf(year)); return tc; } } else if (temp2.equals("month")) { finish = start.minusMonths(1); year = finish.getYear(); month = finish.getMonthOfYear(); finish = finish.dayOfMonth().withMaximumValue(); day = finish.getDayOfMonth(); start = new DateTime(year, month, 1, 0, 0, 0, 0); finish = new DateTime(year, month, day, 23, 59, 59, 59); interval = new Interval(start, finish); tc.addAttribute(TimexNames.type, TimexNames.DATE); tc.addAttribute(TimexNames.value, ymFmt.print(finish)); if (preflag == 1) { finish = new DateTime(year, month, prematchDay, 23, 59, 59, 59); tc.addAttribute(TimexNames.value, fmt.print(finish)); } else if (preflag == 2) { tc.addAttribute(TimexNames.value, fmt.print(finish)); tc.addAttribute(TimexNames.mod, TimexNames.START); } else if (preflag == 3) { start = new DateTime(year, month, day - 10, 0, 0, 0, 0); finish = new DateTime(year, month, day, 23, 59, 59, 59); interval = new Interval(start, finish); tc.addAttribute(TimexNames.value, fmt.print(finish)); tc.addAttribute(TimexNames.mod, TimexNames.END); } return tc; } else if (temp2.equals("week")) { finish = start.minusWeeks(1); dayweek = finish.getDayOfWeek(); finish = finish.minusDays(dayweek - 1); year = finish.getYear(); month = finish.getMonthOfYear(); day = finish.getDayOfMonth(); start = new DateTime(year, month, day, 0, 0, 0, 0); finish = finish.minusDays(-6); year = finish.getYear(); month = finish.getMonthOfYear(); day = finish.getDayOfMonth(); finish = new DateTime(year, month, day, 23, 59, 59, 59); interval = new Interval(start, finish); tc.addAttribute(TimexNames.type, TimexNames.DATE); if (preflag == 1) { String weekIdx = String.valueOf(finish.getWeekOfWeekyear()); weekIdx = weekIdx.length() == 1 ? "0" + weekIdx : weekIdx; tc.addAttribute(TimexNames.value, String.valueOf(year) + "-W" + weekIdx + "-" + String.valueOf(prematchDay)); } if (preflag == 2) { finish = start.minusDays(-2); year = finish.getYear(); month = finish.getMonthOfYear(); day = finish.getDayOfMonth(); finish = new DateTime(year, month, day, 23, 59, 59, 59); String weekIdx = String.valueOf(finish.getWeekOfWeekyear()); weekIdx = weekIdx.length() == 1 ? "0" + weekIdx : weekIdx; tc.addAttribute(TimexNames.value, String.valueOf(year) + "-W" + weekIdx); tc.addAttribute(TimexNames.mod, TimexNames.START); } else if (preflag == 3) { start = start.minusDays(-4); year = start.getYear(); month = start.getMonthOfYear(); day = start.getDayOfMonth(); start = new DateTime(year, month, day, 0, 0, 0, 0); String weekIdx = String.valueOf(start.getWeekOfWeekyear()); weekIdx = weekIdx.length() == 1 ? "0" + weekIdx : weekIdx; tc.addAttribute(TimexNames.value, String.valueOf(year) + "-W" + weekIdx); tc.addAttribute(TimexNames.mod, TimexNames.END); } else { String weekIdx = String.valueOf(start.getWeekOfWeekyear()); tc.addAttribute(TimexNames.value, String.valueOf(year) + "-W" + weekIdx); } return tc; } else if (temp2.equals("weekend")) { dayweek = start.getDayOfWeek(); finish = start.minusDays(dayweek + 1); year = finish.getYear(); month = finish.getMonthOfYear(); day = finish.getDayOfMonth(); start = new DateTime(year, month, day, 0, 0, 0, 0); finish = start.minusDays(-1); day = finish.getDayOfMonth(); finish = new DateTime(year, month, day, 23, 59, 59, 59); String weekIdx = String.valueOf(finish.getWeekOfWeekyear()); weekIdx = weekIdx.length() == 1 ? "0" + weekIdx : weekIdx; tc.addAttribute(TimexNames.value, String.valueOf(year) + "-W" + weekIdx + "-WE"); return tc; /* TODO: I commented out these three cases for now because they don't make sense using TIMEX3 standard */ } // else if (temp2.equals("hour")) { // finish = start.minusHours(1); // interval = new Interval(finish, start); // return interval; // } // // else if (temp2.equals("minute")) { // finish = start.minusMinutes(1); // interval = new Interval(finish, start); // return interval; // } // // else if (temp2.equals("second")) { // finish = start.minusSeconds(1); // interval = new Interval(finish, start); // return interval; // } else if (temp2.equals("century")) { finish = start.minusYears(100); year = finish.getCenturyOfEra(); year = year * 100; start = new DateTime(year, 1, 1, 0, 0, 0, 0); finish = new DateTime(year + 99, 12, 31, 23, 59, 59, 59); tc.addAttribute(TimexNames.type, TimexNames.DATE); tc.addAttribute(TimexNames.value, String.valueOf(finish.getCenturyOfEra())); return tc; } else if (temp2.equals("decade")) { finish = start.minusYears(10); year = finish.getCenturyOfEra(); year = year * 100; start = new DateTime(year, 1, 1, 0, 0, 0, 0); finish = new DateTime(year + 9, 12, 31, 23, 59, 59, 59); tc.addAttribute(TimexNames.type, TimexNames.DATE); tc.addAttribute(TimexNames.value, String.valueOf(finish.getCenturyOfEra() * 10)); return tc; } else if (temp2.equals("mon") || temp2.equals("monday")) { dayweek = start.getDayOfWeek(); finish = start.minusDays(dayweek + 6); year = finish.getYear(); month = finish.getMonthOfYear(); day = finish.getDayOfMonth(); start = new DateTime(year, month, day, 0, 0, 0, 0); finish = new DateTime(year, month, day, 23, 59, 59, 59); tc.addAttribute(TimexNames.type, TimexNames.DATE); tc.addAttribute(TimexNames.value, fmt.print(finish)); if (preflag == 1) { tc.addAttribute(TimexNames.value, tc.getAttribute(TimexNames.value) + "T" + thisTimeOfDay); } return tc; } else if (temp2.equals("tues") || temp2.equals("tuesday")) { dayweek = start.getDayOfWeek(); finish = start.minusDays(dayweek + 5); year = finish.getYear(); month = finish.getMonthOfYear(); day = finish.getDayOfMonth(); start = new DateTime(year, month, day, 0, 0, 0, 0); finish = new DateTime(year, month, day, 23, 59, 59, 59); tc.addAttribute(TimexNames.type, TimexNames.DATE); tc.addAttribute(TimexNames.value, fmt.print(finish)); if (preflag == 1) { tc.addAttribute(TimexNames.value, tc.getAttribute(TimexNames.value) + "T" + thisTimeOfDay); } return tc; } else if (temp2.equals("wed") || temp2.equals("wednesday")) { dayweek = start.getDayOfWeek(); finish = start.minusDays(dayweek + 4); year = finish.getYear(); month = finish.getMonthOfYear(); day = finish.getDayOfMonth(); start = new DateTime(year, month, day, 0, 0, 0, 0); finish = new DateTime(year, month, day, 23, 59, 59, 59); tc.addAttribute(TimexNames.type, TimexNames.DATE); tc.addAttribute(TimexNames.value, fmt.print(finish)); if (preflag == 1) { tc.addAttribute(TimexNames.value, tc.getAttribute(TimexNames.value) + "T" + thisTimeOfDay); } return tc; } else if (temp2.equals("thur") || temp2.equals("thursday")) { dayweek = start.getDayOfWeek(); finish = start.minusDays(dayweek + 3); year = finish.getYear(); month = finish.getMonthOfYear(); day = finish.getDayOfMonth(); start = new DateTime(year, month, day, 0, 0, 0, 0); finish = new DateTime(year, month, day, 23, 59, 59, 59); tc.addAttribute(TimexNames.type, TimexNames.DATE); tc.addAttribute(TimexNames.value, fmt.print(finish)); if (preflag == 1) { tc.addAttribute(TimexNames.value, tc.getAttribute(TimexNames.value) + "T" + thisTimeOfDay); } return tc; } else if (temp2.equals("fri") || temp2.equals("friday")) { dayweek = start.getDayOfWeek(); finish = start.minusDays(dayweek + 2); year = finish.getYear(); month = finish.getMonthOfYear(); day = finish.getDayOfMonth(); start = new DateTime(year, month, day, 0, 0, 0, 0); finish = new DateTime(year, month, day, 23, 59, 59, 59); tc.addAttribute(TimexNames.type, TimexNames.DATE); tc.addAttribute(TimexNames.value, fmt.print(finish)); if (preflag == 1) { tc.addAttribute(TimexNames.value, tc.getAttribute(TimexNames.value) + "T" + thisTimeOfDay); } return tc; } else if (temp2.equals("sat") || temp2.equals("saturday")) { dayweek = start.getDayOfWeek(); finish = start.minusDays(dayweek + 1); year = finish.getYear(); month = finish.getMonthOfYear(); day = finish.getDayOfMonth(); start = new DateTime(year, month, day, 0, 0, 0, 0); finish = new DateTime(year, month, day, 23, 59, 59, 59); tc.addAttribute(TimexNames.type, TimexNames.DATE); tc.addAttribute(TimexNames.value, fmt.print(finish)); if (preflag == 1) { tc.addAttribute(TimexNames.value, tc.getAttribute(TimexNames.value) + "T" + thisTimeOfDay); } return tc; } else if (temp2.equals("sun") || temp2.equals("sunday")) { dayweek = start.getDayOfWeek(); finish = start.minusDays(dayweek); year = finish.getYear(); month = finish.getMonthOfYear(); day = finish.getDayOfMonth(); start = new DateTime(year, month, day, 0, 0, 0, 0); finish = new DateTime(year, month, day, 23, 59, 59, 59); tc.addAttribute(TimexNames.type, TimexNames.DATE); tc.addAttribute(TimexNames.value, fmt.print(finish)); if (preflag == 1) { tc.addAttribute(TimexNames.value, tc.getAttribute(TimexNames.value) + "T" + thisTimeOfDay); } return tc; } else if (temp2.equals("morning")) { finish = start.minusDays(1); year = finish.getYear(); month = finish.getMonthOfYear(); day = finish.getDayOfMonth(); start = new DateTime(year, month, day, 7, 0, 0, 0); finish = new DateTime(year, month, day, 10, 59, 59, 59); tc.addAttribute(TimexNames.type, TimexNames.TIME); tc.addAttribute(TimexNames.value, fmt.print(finish) + TimexNames.MORNING); return tc; } else if (temp2.equals("noon")) { finish = start.minusDays(1); year = finish.getYear(); month = finish.getMonthOfYear(); day = finish.getDayOfMonth(); start = new DateTime(year, month, day, 11, 0, 0, 0); finish = new DateTime(year, month, day, 13, 59, 59, 59); tc.addAttribute(TimexNames.type, TimexNames.TIME); tc.addAttribute(TimexNames.value, fmt.print(finish) + TimexNames.NOON); return tc; } else if (temp2.equals("afternoon")) { finish = start.minusDays(1); year = finish.getYear(); month = finish.getMonthOfYear(); day = finish.getDayOfMonth(); start = new DateTime(year, month, day, 14, 0, 0, 0); finish = new DateTime(year, month, day, 17, 59, 59, 59); tc.addAttribute(TimexNames.type, TimexNames.TIME); tc.addAttribute(TimexNames.value, fmt.print(finish) + TimexNames.AFTERNOON); return tc; } else if (temp2.equals("evening")) { finish = start.minusDays(1); year = finish.getYear(); month = finish.getMonthOfYear(); day = finish.getDayOfMonth(); start = new DateTime(year, month, day, 18, 0, 0, 0); finish = new DateTime(year, month, day, 20, 59, 59, 59); tc.addAttribute(TimexNames.type, TimexNames.TIME); tc.addAttribute(TimexNames.value, fmt.print(finish) + TimexNames.EVENING); return tc; } else if (temp2.equals("night")) { finish = start.minusDays(1); year = finish.getYear(); month = finish.getMonthOfYear(); day = finish.getDayOfMonth(); start = new DateTime(year, month, day, 21, 0, 0, 0); finish = new DateTime(year, month, day, 23, 59, 59, 59); tc.addAttribute(TimexNames.type, TimexNames.TIME); tc.addAttribute(TimexNames.value, fmt.print(finish) + TimexNames.NIGHT); return tc; } else if (temp2.equals("day")) { finish = start.minusDays(1); year = finish.getYear(); month = finish.getMonthOfYear(); day = finish.getDayOfMonth(); start = new DateTime(year, month, day, 0, 0, 0, 0); finish = new DateTime(year, month, day, 23, 59, 59, 59); tc.addAttribute(TimexNames.type, TimexNames.DATE); tc.addAttribute(TimexNames.value, fmt.print(finish)); return tc; } else if (temp2.equals("spring")) { finish = start.minusYears(1); year = finish.getYear(); start = new DateTime(year, 3, 1, 0, 0, 0, 0); finish = new DateTime(year, 5, 31, 23, 59, 59, 59); tc.addAttribute(TimexNames.type, TimexNames.DATE); tc.addAttribute(TimexNames.value, yFmt.print(finish) + "-" + TimexNames.SPRING); return tc; } else if (temp2.equals("summer")) { finish = start.minusYears(1); year = finish.getYear(); start = new DateTime(year, 6, 1, 0, 0, 0, 0); finish = new DateTime(year, 8, 31, 23, 59, 59, 59); tc.addAttribute(TimexNames.type, TimexNames.DATE); tc.addAttribute(TimexNames.value, yFmt.print(finish) + "-" + TimexNames.SUMMER); return tc; } else if (temp2.equals("fall") || temp2.equals("autumn")) { finish = start.minusYears(1); year = finish.getYear(); start = new DateTime(year, 9, 1, 0, 0, 0, 0); finish = new DateTime(year, 11, 30, 23, 59, 59, 59); tc.addAttribute(TimexNames.type, TimexNames.DATE); tc.addAttribute(TimexNames.value, yFmt.print(finish) + "-" + TimexNames.FALL); return tc; } else if (temp2.equals("winter")) { finish = start.minusYears(2); year = finish.getYear(); start = new DateTime(year, 12, 1, 0, 0, 0, 0); finish = new DateTime(year + 1, 2, 28, 23, 59, 59, 59); tc.addAttribute(TimexNames.type, TimexNames.DATE); tc.addAttribute(TimexNames.value, yFmt.print(finish) + "-" + TimexNames.WINTER); return tc; } // If we have (last|previous|...)(month) else { String patternStr1 = monther; Pattern pattern1 = Pattern.compile(patternStr1); Matcher matcher1 = pattern1.matcher(temp2); boolean matchFound1 = matcher1.find(); if (matchFound1) { month = Integer.parseInt(temp.hm.get(temp2)); finish = start.minusYears(1); year = finish.getYear(); finish = new DateTime(year, month, 1, 23, 59, 59, 59); finish = finish.dayOfMonth().withMaximumValue(); start = new DateTime(year, month, 1, 0, 0, 0, 0); tc.addAttribute(TimexNames.type, TimexNames.DATE); tc.addAttribute(TimexNames.value, ymFmt.print(finish)); if (preflag == 2) { finish = new DateTime(year, month, 10, 23, 59, 59, 59); start = new DateTime(year, month, 1, 0, 0, 0, 0); tc.addAttribute(TimexNames.mod, TimexNames.START); } else if (preflag == 3) { start = new DateTime(year, month, 20, 0, 0, 0, 0); tc.addAttribute(TimexNames.mod, TimexNames.END); } return tc; } else { return null; } } } else if (temp1.equals("early") || temp1.equals("earlier")) { tc.addAttribute(TimexNames.mod, TimexNames.START); if (temp2.equals("century")) { year = start.getCenturyOfEra(); year = year * 100; start = new DateTime(year, 1, 1, 0, 0, 0, 0); finish = new DateTime(year + 20, 12, 31, 23, 59, 59, 59); tc.addAttribute(TimexNames.type, TimexNames.DATE); tc.addAttribute(TimexNames.value, String.valueOf(finish.getCenturyOfEra())); return tc; } else if (temp2.equals("decade")) { year = start.getCenturyOfEra(); year = year * 100; start = new DateTime(year, 1, 1, 0, 0, 0, 0); finish = new DateTime(year + 2, 12, 31, 23, 59, 59, 59); //interval = new Interval(start, finish); tc.addAttribute(TimexNames.type, TimexNames.DATE); tc.addAttribute(TimexNames.value, String.valueOf(finish.getCenturyOfEra() * 10)); return tc; } else if (temp2.equals("year")) { year = start.getYear(); start = new DateTime(year, 1, 1, 0, 0, 0, 0); finish = new DateTime(year, 3, 31, 23, 59, 59, 59); tc.addAttribute(TimexNames.type, TimexNames.DATE); tc.addAttribute(TimexNames.value, yFmt.print(finish)); return tc; } else if (temp2.equals("month")) { year = start.getYear(); month = start.getMonthOfYear(); finish = start.dayOfMonth().withMaximumValue(); day = finish.getDayOfMonth(); start = new DateTime(year, month, 1, 0, 0, 0, 0); finish = new DateTime(year, month, 10, 23, 59, 59, 59); tc.addAttribute(TimexNames.type, TimexNames.DATE); tc.addAttribute(TimexNames.value, ymFmt.print(finish)); return tc; } else if (temp2.equals("week")) { dayweek = start.getDayOfWeek(); start = start.minusDays(dayweek - 1); year = start.getYear(); month = start.getMonthOfYear(); day = start.getDayOfMonth(); start = new DateTime(year, month, day, 0, 0, 0, 0); finish = start.minusDays(-2); year = finish.getYear(); month = finish.getMonthOfYear(); day = finish.getDayOfMonth(); finish = new DateTime(year, month, day, 23, 59, 59, 59); String weekIdx = String.valueOf(finish.getWeekOfWeekyear()); weekIdx = weekIdx.length() == 1 ? "0" + weekIdx : weekIdx; tc.addAttribute(TimexNames.type, TimexNames.DATE); tc.addAttribute(TimexNames.value, String.valueOf(year) + "-W" + weekIdx); return tc; } else { // This part only focus on "early" + "[month]" // Modified by Zhili: if the sentence is past tense, and the month mentioned is // after DCT, then subtract 1 from year String tense = temporalPhrase.getTense(); String patternStr1 = monther; Pattern pattern1 = Pattern.compile(patternStr1); Matcher matcher1 = pattern1.matcher(temp2); boolean matchFound1 = matcher1.find(); if (matchFound1) { month = Integer.parseInt(temp.hm.get(temp2)); year = start.getYear(); if (tense.equals("past") && start.getMonthOfYear() < month) { year -= 1; } else if (!tense.equals("past") && start.getMonthOfYear() > month) { year += 1; } finish = new DateTime(year, month, 10, 23, 59, 59, 59); start = new DateTime(year, month, 1, 0, 0, 0, 0); tc.addAttribute(TimexNames.type, TimexNames.DATE); tc.addAttribute(TimexNames.value, ymFmt.print(finish)); return tc; } else { return null; } } } else if (temp1.equals("late") || temp1.equals("later")) { tc.addAttribute(TimexNames.mod, TimexNames.END); tc.addAttribute(TimexNames.type, TimexNames.DATE); if (temp2.equals("century")) { year = start.getCenturyOfEra(); year = year * 100; start = new DateTime(year + 80, 1, 1, 0, 0, 0, 0); finish = new DateTime(year + 99, 12, 31, 23, 59, 59, 59); tc.addAttribute(TimexNames.value, String.valueOf(finish.getCenturyOfEra())); return tc; } else if (temp2.equals("decade")) { year = start.getCenturyOfEra(); year = year * 100; start = new DateTime(year + 8, 1, 1, 0, 0, 0, 0); finish = new DateTime(year + 9, 12, 31, 23, 59, 59, 59); //interval = new Interval(start, finish); tc.addAttribute(TimexNames.type, TimexNames.DATE); tc.addAttribute(TimexNames.value, String.valueOf(finish.getCenturyOfEra() * 10)); return tc; } else if (temp2.equals("year")) { year = start.getYear(); start = new DateTime(year, 10, 1, 0, 0, 0, 0); finish = new DateTime(year, 12, 31, 23, 59, 59, 59); interval = new Interval(start, finish); tc.addAttribute(TimexNames.value, yFmt.print(finish)); return tc; } else if (temp2.equals("month")) { year = start.getYear(); month = start.getMonthOfYear(); finish = start.dayOfMonth().withMaximumValue(); day = finish.getDayOfMonth(); start = new DateTime(year, month, day - 10, 0, 0, 0, 0); finish = new DateTime(year, month, day, 23, 59, 59, 59); tc.addAttribute(TimexNames.value, ymFmt.print(finish)); return tc; } else { String patternStr1 = monther; Pattern pattern1 = Pattern.compile(patternStr1); Matcher matcher1 = pattern1.matcher(temp2); boolean matchFound1 = matcher1.find(); if (matchFound1) { month = Integer.parseInt(temp.hm.get(temp2)); year = start.getYear(); String tense = temporalPhrase.getTense(); if (tense.equals("past") && start.getMonthOfYear() < month) { year -= 1; } else if (!tense.equals("past") && start.getMonthOfYear() > month) { year += 1; } finish = new DateTime(year, month, 1, 23, 59, 59, 59); finish = finish.dayOfMonth().withMaximumValue(); start = new DateTime(year, month, finish.getDayOfMonth() - 10, 0, 0, 0, 0); tc.addAttribute(TimexNames.value, ymFmt.print(finish)); return tc; } else { return null; } } } else if (temp1.equals("this") || temp1.equals("today")) { tc.addAttribute(TimexNames.type, TimexNames.DATE); if (temp2.equals("century")) { year = start.getCenturyOfEra(); year = year * 100; start = new DateTime(year, 1, 1, 0, 0, 0, 0); finish = new DateTime(year + 99, 12, 31, 23, 59, 59, 59); tc.addAttribute(TimexNames.value, String.valueOf(finish.getCenturyOfEra())); return tc; } else if (temp2.equals("decade")) { year = start.getCenturyOfEra(); year = year * 100; start = new DateTime(year, 1, 1, 0, 0, 0, 0); finish = new DateTime(year + 9, 12, 31, 23, 59, 59, 59); //interval = new Interval(start, finish); tc.addAttribute(TimexNames.type, TimexNames.DATE); tc.addAttribute(TimexNames.value, String.valueOf(finish.getCenturyOfEra() * 10)); return tc; } else if (temp2.equals("year")) { year = start.getYear(); if (preflag == 1) { finish = new DateTime(year, month, 1, 23, 59, 59, 59); finish = finish.dayOfMonth().withMaximumValue(); start = new DateTime(year, month, 1, 0, 0, 0, 0); tc.addAttribute(TimexNames.value, ymFmt.print(finish)); return tc; } else if (preflag == 2) { start = new DateTime(year, 1, 1, 0, 0, 0, 0); finish = new DateTime(year, 3, 31, 23, 59, 59, 59); tc.addAttribute(TimexNames.value, yFmt.print(finish)); tc.addAttribute(TimexNames.mod, TimexNames.START); return tc; } else if (preflag == 3) { start = new DateTime(year, 10, 1, 0, 0, 0, 0); finish = new DateTime(year, 12, 31, 23, 59, 59, 59); tc.addAttribute(TimexNames.value, yFmt.print(finish)); tc.addAttribute(TimexNames.mod, TimexNames.END); return tc; } else { start = new DateTime(year, 1, 1, 0, 0, 0, 0); finish = new DateTime(year, 12, 31, 23, 59, 59, 59); tc.addAttribute(TimexNames.value, yFmt.print(finish)); return tc; } } else if (temp2.equals("month")) { year = start.getYear(); month = start.getMonthOfYear(); finish = start.dayOfMonth().withMaximumValue(); day = finish.getDayOfMonth(); start = new DateTime(year, month, 1, 0, 0, 0, 0); finish = new DateTime(year, month, day, 23, 59, 59, 59); tc.addAttribute(TimexNames.value, ymFmt.print(finish)); if (preflag == 1) { finish = new DateTime(year, month, prematchDay, 23, 59, 59, 59); tc.addAttribute(TimexNames.value, fmt.print(finish)); } else if (preflag == 2) { start = new DateTime(year, month, 1, 0, 0, 0, 0); finish = new DateTime(year, month, 10, 23, 59, 59, 59); tc.addAttribute(TimexNames.mod, TimexNames.START); tc.addAttribute(TimexNames.value, ymFmt.print(finish)); } else if (preflag == 3) { start = new DateTime(year, month, day - 10, 0, 0, 0, 0); finish = new DateTime(year, month, day, 23, 59, 59, 59); tc.addAttribute(TimexNames.mod, TimexNames.END); tc.addAttribute(TimexNames.value, ymFmt.print(finish)); } return tc; } else if (temp2.equals("week")) { dayweek = start.getDayOfWeek(); start = start.minusDays(dayweek - 1); year = start.getYear(); month = start.getMonthOfYear(); day = start.getDayOfMonth(); start = new DateTime(year, month, day, 0, 0, 0, 0); finish = start.minusDays(-6); year = finish.getYear(); month = finish.getMonthOfYear(); day = finish.getDayOfMonth(); finish = new DateTime(year, month, day, 23, 59, 59, 59); String weekIdx = String.valueOf(finish.getWeekOfWeekyear()); weekIdx = weekIdx.length() == 1 ? "0" + weekIdx : weekIdx; tc.addAttribute(TimexNames.value, yFmt.print(finish) + "-W" + weekIdx); if (preflag == 1) { weekIdx = String.valueOf(finish.getWeekOfWeekyear()); weekIdx = weekIdx.length() == 1 ? "0" + weekIdx : weekIdx; tc.addAttribute(TimexNames.value, String.valueOf(year) + "-W" + weekIdx + "-" + String.valueOf(prematchDay)); } else if (preflag == 2) { finish = start.minusDays(-2); year = finish.getYear(); month = finish.getMonthOfYear(); day = finish.getDayOfMonth(); finish = new DateTime(year, month, day, 23, 59, 59, 59); tc.addAttribute(TimexNames.mod, TimexNames.START); } else if (preflag == 3) { start = start.minusDays(-4); year = start.getYear(); month = start.getMonthOfYear(); day = start.getDayOfMonth(); start = new DateTime(year, month, day, 0, 0, 0, 0); tc.addAttribute(TimexNames.mod, TimexNames.END); } return tc; } else if (temp2.equals("weekend")) { dayweek = start.getDayOfWeek(); start = start.minusDays(dayweek - 6); year = start.getYear(); month = start.getMonthOfYear(); day = start.getDayOfMonth(); start = new DateTime(year, month, day, 0, 0, 0, 0); finish = start.minusDays(-1); day = finish.getDayOfMonth(); finish = new DateTime(year, month, day, 23, 59, 59, 59); String weekIdx = String.valueOf(finish.getWeekOfWeekyear()); weekIdx = weekIdx.length() == 1 ? "0" + weekIdx : weekIdx; tc.addAttribute(TimexNames.value, String.valueOf(year) + "-W" + weekIdx + "-WE"); return tc; } else if (temp2.equals("mon") || temp2.equals("monday")) { dayweek = start.getDayOfWeek(); start = start.minusDays(dayweek - 1); day = start.getDayOfMonth(); year = start.getYear(); month = start.getMonthOfYear(); start = new DateTime(year, month, day, 0, 0, 0, 0); finish = new DateTime(year, month, day, 23, 59, 59, 59); String tense = temporalPhrase.getTense(); if (tense.equals("past") && dayweek < 1) { finish = finish.minusDays(7); } else if (!tense.equals("past") && dayweek > 1) { finish = finish.minusDays(-7); } tc.addAttribute(TimexNames.value, fmt.print(finish)); if (preflag == 1) { tc.addAttribute(TimexNames.value, tc.getAttribute(TimexNames.value) + "T" + thisTimeOfDay); } return tc; } else if (temp2.equals("tues") || temp2.equals("tuesday")) { dayweek = start.getDayOfWeek(); start = start.minusDays(dayweek - 2); day = start.getDayOfMonth(); year = start.getYear(); month = start.getMonthOfYear(); start = new DateTime(year, month, day, 0, 0, 0, 0); finish = new DateTime(year, month, day, 23, 59, 59, 59); String tense = temporalPhrase.getTense(); if (tense.equals("past") && dayweek < 2) { finish = finish.minusDays(7); } else if (!tense.equals("past") && dayweek > 2) { finish = finish.minusDays(-7); } tc.addAttribute(TimexNames.value, fmt.print(finish)); if (preflag == 1) { tc.addAttribute(TimexNames.value, tc.getAttribute(TimexNames.value) + "T" + thisTimeOfDay); } return tc; } else if (temp2.equals("wed") || temp2.equals("wednesday")) { dayweek = start.getDayOfWeek(); start = start.minusDays(dayweek - 3); day = start.getDayOfMonth(); year = start.getYear(); month = start.getMonthOfYear(); start = new DateTime(year, month, day, 0, 0, 0, 0); finish = new DateTime(year, month, day, 23, 59, 59, 59); String tense = temporalPhrase.getTense(); if (tense.equals("past") && dayweek < 3) { finish = finish.minusDays(7); } else if (!tense.equals("past") && dayweek > 3) { finish = finish.minusDays(-7); } tc.addAttribute(TimexNames.value, fmt.print(finish)); if (preflag == 1) { tc.addAttribute(TimexNames.value, tc.getAttribute(TimexNames.value) + "T" + thisTimeOfDay); } return tc; } else if (temp2.equals("thur") || temp2.equals("thursday")) { dayweek = start.getDayOfWeek(); start = start.minusDays(dayweek - 4); day = start.getDayOfMonth(); year = start.getYear(); month = start.getMonthOfYear(); start = new DateTime(year, month, day, 0, 0, 0, 0); finish = new DateTime(year, month, day, 23, 59, 59, 59); String tense = temporalPhrase.getTense(); if (tense.equals("past") && dayweek < 4) { finish = finish.minusDays(7); } else if (!tense.equals("past") && dayweek > 4) { finish = finish.minusDays(-7); } tc.addAttribute(TimexNames.value, fmt.print(finish)); if (preflag == 1) { tc.addAttribute(TimexNames.value, tc.getAttribute(TimexNames.value) + "T" + thisTimeOfDay); } return tc; } else if (temp2.equals("fri") || temp2.equals("friday")) { dayweek = start.getDayOfWeek(); start = start.minusDays(dayweek - 5); day = start.getDayOfMonth(); year = start.getYear(); month = start.getMonthOfYear(); start = new DateTime(year, month, day, 0, 0, 0, 0); finish = new DateTime(year, month, day, 23, 59, 59, 59); String tense = temporalPhrase.getTense(); if (tense.equals("past") && dayweek < 5) { finish = finish.minusDays(7); } else if (!tense.equals("past") && dayweek > 5) { finish = finish.minusDays(-7); } tc.addAttribute(TimexNames.value, fmt.print(finish)); if (preflag == 1) { tc.addAttribute(TimexNames.value, tc.getAttribute(TimexNames.value) + "T" + thisTimeOfDay); } return tc; } else if (temp2.equals("sat") || temp2.equals("saturday")) { dayweek = start.getDayOfWeek(); start = start.minusDays(dayweek - 6); day = start.getDayOfMonth(); year = start.getYear(); month = start.getMonthOfYear(); start = new DateTime(year, month, day, 0, 0, 0, 0); finish = new DateTime(year, month, day, 23, 59, 59, 59); String tense = temporalPhrase.getTense(); if (tense.equals("past") && dayweek < 6) { finish = finish.minusDays(7); } else if (!tense.equals("past") && dayweek > 6) { finish = finish.minusDays(-7); } tc.addAttribute(TimexNames.value, fmt.print(finish)); if (preflag == 1) { tc.addAttribute(TimexNames.value, tc.getAttribute(TimexNames.value) + "T" + thisTimeOfDay); } return tc; } else if (temp2.equals("sun") || temp2.equals("sunday")) { dayweek = start.getDayOfWeek(); start = start.minusDays(dayweek - 7); day = start.getDayOfMonth(); year = start.getYear(); month = start.getMonthOfYear(); start = new DateTime(year, month, day, 0, 0, 0, 0); finish = new DateTime(year, month, day, 23, 59, 59, 59); String tense = temporalPhrase.getTense(); if (tense.equals("past") && dayweek < 7) { finish = finish.minusDays(7); } else if (!tense.equals("past") && dayweek > 7) { finish = finish.minusDays(-7); } tc.addAttribute(TimexNames.value, fmt.print(finish)); if (preflag == 1) { tc.addAttribute(TimexNames.value, tc.getAttribute(TimexNames.value) + "T" + thisTimeOfDay); } return tc; } else if (temp2.equals("morning")) { year = start.getYear(); month = start.getMonthOfYear(); day = start.getDayOfMonth(); start = new DateTime(year, month, day, 7, 0, 0, 0); finish = new DateTime(year, month, day, 10, 59, 59, 59); tc.addAttribute(TimexNames.type, TimexNames.TIME); tc.addAttribute(TimexNames.value, fmt.print(finish) + TimexNames.MORNING); return tc; } else if (temp2.equals("noon")) { year = start.getYear(); month = start.getMonthOfYear(); day = start.getDayOfMonth(); start = new DateTime(year, month, day, 11, 0, 0, 0); finish = new DateTime(year, month, day, 13, 59, 59, 59); tc.addAttribute(TimexNames.type, TimexNames.TIME); tc.addAttribute(TimexNames.value, fmt.print(finish) + TimexNames.NOON); return tc; } else if (temp2.equals("afternoon")) { year = start.getYear(); month = start.getMonthOfYear(); day = start.getDayOfMonth(); start = new DateTime(year, month, day, 14, 0, 0, 0); finish = new DateTime(year, month, day, 17, 59, 59, 59); tc.addAttribute(TimexNames.type, TimexNames.TIME); tc.addAttribute(TimexNames.value, fmt.print(finish) + TimexNames.AFTERNOON); return tc; } else if (temp2.equals("evening")) { year = start.getYear(); month = start.getMonthOfYear(); day = start.getDayOfMonth(); start = new DateTime(year, month, day, 18, 0, 0, 0); finish = new DateTime(year, month, day, 20, 59, 59, 59); tc.addAttribute(TimexNames.type, TimexNames.TIME); tc.addAttribute(TimexNames.value, fmt.print(finish) + TimexNames.EVENING); return tc; } else if (temp2.equals("night")) { year = start.getYear(); month = start.getMonthOfYear(); day = start.getDayOfMonth(); start = new DateTime(year, month, day, 21, 0, 0, 0); finish = new DateTime(year, month, day, 23, 59, 59, 59); tc.addAttribute(TimexNames.type, TimexNames.TIME); tc.addAttribute(TimexNames.value, fmt.print(finish) + TimexNames.NIGHT); return tc; } else if (temp2.equals("spring")) { year = start.getYear(); start = new DateTime(year, 3, 1, 0, 0, 0, 0); finish = new DateTime(year, 5, 31, 23, 59, 59, 59); tc.addAttribute(TimexNames.value, yFmt.print(finish) + "-" + TimexNames.SPRING); return tc; } else if (temp2.equals("summer")) { year = start.getYear(); start = new DateTime(year, 6, 1, 0, 0, 0, 0); finish = new DateTime(year, 8, 31, 23, 59, 59, 59); tc.addAttribute(TimexNames.value, yFmt.print(finish) + "-" + TimexNames.SUMMER); return tc; } else if (temp2.equals("fall")) { year = start.getYear(); start = new DateTime(year, 9, 1, 0, 0, 0, 0); finish = new DateTime(year, 11, 30, 23, 59, 59, 59); tc.addAttribute(TimexNames.value, yFmt.print(finish) + "-" + TimexNames.FALL); return tc; } else if (temp2.equals("winter")) { finish = start.minusDays(1); year = finish.getYear(); start = new DateTime(year, 12, 1, 0, 0, 0, 0); finish = new DateTime(year + 1, 2, 28, 23, 59, 59, 59); tc.addAttribute(TimexNames.value, yFmt.print(finish) + "-" + TimexNames.WINTER); return tc; } else { String patternStr1 = monther; Pattern pattern1 = Pattern.compile(patternStr1); Matcher matcher1 = pattern1.matcher(temp2); boolean matchFound1 = matcher1.find(); if (matchFound1) { month = Integer.parseInt(temp.hm.get(temp2)); year = start.getYear(); int referenceMonth = start.getMonthOfYear(); finish = new DateTime(year, month, 1, 23, 59, 59, 59); finish = finish.dayOfMonth().withMaximumValue(); start = new DateTime(year, month, 1, 0, 0, 0, 0); String tense = temporalPhrase.getTense(); if (tense.equals("past") && referenceMonth < month) { finish = finish.minusYears(1); } else if (!tense.equals("past") && referenceMonth > month) { finish = finish.minusYears(-1); } tc.addAttribute(TimexNames.value, ymFmt.print(finish)); if (preflag == 2) { finish = new DateTime(year, month, 10, 23, 59, 59, 59); start = new DateTime(year, month, 1, 0, 0, 0, 0); tc.addAttribute(TimexNames.mod, TimexNames.START); } else if (preflag == 3) { start = new DateTime(year, month, 20, 0, 0, 0, 0); tc.addAttribute(TimexNames.mod, TimexNames.END); } return tc; } else { return null; } } } else if (temp1.equals("next") || temp1.equals("upcoming") || temp1.equals("following") || temp1.equals("tomorrow")) { tc.addAttribute(TimexNames.type, TimexNames.DATE); if (temp2.equals("year")) { finish = start.minusYears(-1); year = finish.getYear(); if (preflag == 1) { finish = new DateTime(year, month, 1, 23, 59, 59, 59); finish = finish.dayOfMonth().withMaximumValue(); start = new DateTime(year, month, 1, 0, 0, 0, 0); tc.addAttribute(TimexNames.value, ymFmt.print(finish)); return tc; } else if (preflag == 2) { start = new DateTime(year, 1, 1, 0, 0, 0, 0); finish = new DateTime(year, 3, 31, 23, 59, 59, 59); tc.addAttribute(TimexNames.value, ymFmt.print(finish)); tc.addAttribute(TimexNames.mod, TimexNames.START); return tc; } else if (preflag == 3) { start = new DateTime(year, 10, 1, 0, 0, 0, 0); finish = new DateTime(year, 12, 31, 23, 59, 59, 59); tc.addAttribute(TimexNames.value, ymFmt.print(finish)); tc.addAttribute(TimexNames.mod, TimexNames.END); return tc; } else { start = new DateTime(year, 1, 1, 0, 0, 0, 0); finish = new DateTime(year, 12, 31, 23, 59, 59, 59); tc.addAttribute(TimexNames.value, yFmt.print(finish)); return tc; } } else if (temp2.equals("month")) { finish = start.minusMonths(-1); year = finish.getYear(); month = finish.getMonthOfYear(); finish = finish.dayOfMonth().withMaximumValue(); day = finish.getDayOfMonth(); start = new DateTime(year, month, 1, 0, 0, 0, 0); finish = new DateTime(year, month, day, 23, 59, 59, 59); tc.addAttribute(TimexNames.value, ymFmt.print(finish)); if (preflag == 1) { finish = new DateTime(year, month, prematchDay, 23, 59, 59, 59); tc.addAttribute(TimexNames.value, fmt.print(finish)); } else if (preflag == 2) { start = new DateTime(year, month, 1, 0, 0, 0, 0); finish = new DateTime(year, month, 10, 23, 59, 59, 59); tc.addAttribute(TimexNames.mod, TimexNames.START); } else if (preflag == 3) { start = new DateTime(year, month, day - 10, 0, 0, 0, 0); finish = new DateTime(year, month, day, 23, 59, 59, 59); tc.addAttribute(TimexNames.mod, TimexNames.END); } return tc; } else if (temp2.equals("week")) { finish = start.minusWeeks(-1); dayweek = finish.getDayOfWeek(); finish = finish.minusDays(dayweek - 1); year = finish.getYear(); month = finish.getMonthOfYear(); day = finish.getDayOfMonth(); start = new DateTime(year, month, day, 0, 0, 0, 0); finish = start.minusDays(-6); year = finish.getYear(); month = finish.getMonthOfYear(); day = finish.getDayOfMonth(); finish = new DateTime(year, month, day, 23, 59, 59, 59); String weekIdx = String.valueOf(finish.getWeekOfWeekyear()); weekIdx = weekIdx.length() == 1 ? "0" + weekIdx : weekIdx; tc.addAttribute(TimexNames.value, String.valueOf(year) + "-W" + weekIdx); if (preflag == 1) { weekIdx = String.valueOf(finish.getWeekOfWeekyear()); weekIdx = weekIdx.length() == 1 ? "0" + weekIdx : weekIdx; tc.addAttribute(TimexNames.value, String.valueOf(year) + "-W" + weekIdx + "-" + String.valueOf(prematchDay)); } else if (preflag == 2) { finish = start.minusDays(-2); year = finish.getYear(); month = finish.getMonthOfYear(); day = finish.getDayOfMonth(); finish = new DateTime(year, month, day, 23, 59, 59, 59); tc.addAttribute(TimexNames.mod, TimexNames.START); } else if (preflag == 3) { start = start.minusDays(-4); year = start.getYear(); month = start.getMonthOfYear(); day = start.getDayOfMonth(); start = new DateTime(year, month, day, 0, 0, 0, 0); tc.addAttribute(TimexNames.mod, TimexNames.END); } return tc; } else if (temp2.equals("weekend")) { dayweek = start.getDayOfWeek(); finish = start.minusDays(dayweek - 13); year = finish.getYear(); month = finish.getMonthOfYear(); day = finish.getDayOfMonth(); start = new DateTime(year, month, day, 0, 0, 0, 0); finish = start.minusDays(-1); day = finish.getDayOfMonth(); finish = new DateTime(year, month, day, 23, 59, 59, 59); String weekIdx = String.valueOf(finish.getWeekOfWeekyear()); weekIdx = weekIdx.length() == 1 ? "0" + weekIdx : weekIdx; tc.addAttribute(TimexNames.value, String.valueOf(year) + "-W" + weekIdx + "-WE"); return tc; } else if (temp2.equals("hour")) { finish = start.minusHours(-1); tc.addAttribute(TimexNames.value, TimexNames.FUTURE_REF); return tc; } else if (temp2.equals("minute")) { finish = start.minusMinutes(-1); tc.addAttribute(TimexNames.value, TimexNames.FUTURE_REF); return tc; } else if (temp2.equals("second")) { finish = start.minusSeconds(-1); tc.addAttribute(TimexNames.value, TimexNames.FUTURE_REF); return tc; } else if (temp2.equals("century")) { finish = start.minusYears(-100); year = finish.getCenturyOfEra(); year = year * 100; start = new DateTime(year, 1, 1, 0, 0, 0, 0); finish = new DateTime(year + 99, 12, 31, 23, 59, 59, 59); tc.addAttribute(TimexNames.value, String.valueOf(finish.getCenturyOfEra())); return tc; } else if (temp2.equals("decade")) { finish = start.minusYears(-10); year = finish.getCenturyOfEra(); year = year * 100; start = new DateTime(year, 1, 1, 0, 0, 0, 0); finish = new DateTime(year + 9, 12, 31, 23, 59, 59, 59); tc.addAttribute(TimexNames.type, TimexNames.DATE); tc.addAttribute(TimexNames.value, String.valueOf(finish.getCenturyOfEra() * 10)); return tc; } else if (temp2.equals("day")) { finish = start.minusDays(-1); year = finish.getYear(); month = finish.getMonthOfYear(); day = finish.getDayOfMonth(); start = new DateTime(year, month, day, 0, 0, 0, 0); finish = new DateTime(year, month, day, 23, 59, 59, 59); tc.addAttribute(TimexNames.value, fmt.print(finish)); return tc; } else if (temp2.equals("mon") || temp2.equals("monday")) { dayweek = start.getDayOfWeek(); finish = start.minusDays(dayweek - 8); year = finish.getYear(); month = finish.getMonthOfYear(); day = finish.getDayOfMonth(); start = new DateTime(year, month, day, 0, 0, 0, 0); finish = new DateTime(year, month, day, 23, 59, 59, 59); tc.addAttribute(TimexNames.value, fmt.print(finish)); if (preflag == 1) { tc.addAttribute(TimexNames.value, tc.getAttribute(TimexNames.value) + "T" + thisTimeOfDay); } return tc; } else if (temp2.equals("tues") || temp2.equals("tuesday")) { dayweek = start.getDayOfWeek(); finish = start.minusDays(dayweek - 9); year = finish.getYear(); month = finish.getMonthOfYear(); day = finish.getDayOfMonth(); start = new DateTime(year, month, day, 0, 0, 0, 0); finish = new DateTime(year, month, day, 23, 59, 59, 59); tc.addAttribute(TimexNames.value, fmt.print(finish)); if (preflag == 1) { tc.addAttribute(TimexNames.value, tc.getAttribute(TimexNames.value) + "T" + thisTimeOfDay); } return tc; } else if (temp2.equals("wed") || temp2.equals("wednesday")) { dayweek = start.getDayOfWeek(); finish = start.minusDays(dayweek - 10); year = finish.getYear(); month = finish.getMonthOfYear(); day = finish.getDayOfMonth(); start = new DateTime(year, month, day, 0, 0, 0, 0); finish = new DateTime(year, month, day, 23, 59, 59, 59); tc.addAttribute(TimexNames.value, fmt.print(finish)); if (preflag == 1) { tc.addAttribute(TimexNames.value, tc.getAttribute(TimexNames.value) + "T" + thisTimeOfDay); } return tc; } else if (temp2.equals("thur") || temp2.equals("thursday")) { dayweek = start.getDayOfWeek(); finish = start.minusDays(dayweek - 11); year = finish.getYear(); month = finish.getMonthOfYear(); day = finish.getDayOfMonth(); start = new DateTime(year, month, day, 0, 0, 0, 0); finish = new DateTime(year, month, day, 23, 59, 59, 59); tc.addAttribute(TimexNames.value, fmt.print(finish)); if (preflag == 1) { tc.addAttribute(TimexNames.value, tc.getAttribute(TimexNames.value) + "T" + thisTimeOfDay); } return tc; } else if (temp2.equals("fri") || temp2.equals("friday")) { dayweek = start.getDayOfWeek(); finish = start.minusDays(dayweek - 12); year = finish.getYear(); month = finish.getMonthOfYear(); day = finish.getDayOfMonth(); start = new DateTime(year, month, day, 0, 0, 0, 0); finish = new DateTime(year, month, day, 23, 59, 59, 59); tc.addAttribute(TimexNames.value, fmt.print(finish)); if (preflag == 1) { tc.addAttribute(TimexNames.value, tc.getAttribute(TimexNames.value) + "T" + thisTimeOfDay); } return tc; } else if (temp2.equals("sat") || temp2.equals("saturday")) { dayweek = start.getDayOfWeek(); finish = start.minusDays(dayweek - 13); year = finish.getYear(); month = finish.getMonthOfYear(); day = finish.getDayOfMonth(); start = new DateTime(year, month, day, 0, 0, 0, 0); finish = new DateTime(year, month, day, 23, 59, 59, 59); tc.addAttribute(TimexNames.value, fmt.print(finish)); if (preflag == 1) { tc.addAttribute(TimexNames.value, tc.getAttribute(TimexNames.value) + "T" + thisTimeOfDay); } return tc; } else if (temp2.equals("sun") || temp2.equals("sunday")) { dayweek = start.getDayOfWeek(); finish = start.minusDays(dayweek - 14); year = finish.getYear(); month = finish.getMonthOfYear(); day = finish.getDayOfMonth(); start = new DateTime(year, month, day, 0, 0, 0, 0); finish = new DateTime(year, month, day, 23, 59, 59, 59); tc.addAttribute(TimexNames.value, fmt.print(finish)); if (preflag == 1) { tc.addAttribute(TimexNames.value, tc.getAttribute(TimexNames.value) + "T" + thisTimeOfDay); } return tc; } else if (temp2.equals("morning")) { finish = start.minusDays(-1); year = finish.getYear(); month = finish.getMonthOfYear(); day = finish.getDayOfMonth(); start = new DateTime(year, month, day, 7, 0, 0, 0); finish = new DateTime(year, month, day, 10, 59, 59, 59); tc.addAttribute(TimexNames.type, TimexNames.TIME); tc.addAttribute(TimexNames.value, fmt.print(finish) + TimexNames.MORNING); return tc; } else if (temp2.equals("noon")) { finish = start.minusDays(-1); year = finish.getYear(); month = finish.getMonthOfYear(); day = finish.getDayOfMonth(); start = new DateTime(year, month, day, 11, 0, 0, 0); finish = new DateTime(year, month, day, 13, 59, 59, 59); tc.addAttribute(TimexNames.type, TimexNames.TIME); tc.addAttribute(TimexNames.value, fmt.print(finish) + TimexNames.NOON); return tc; } else if (temp2.equals("afternoon")) { finish = start.minusDays(-1); year = finish.getYear(); month = finish.getMonthOfYear(); day = finish.getDayOfMonth(); start = new DateTime(year, month, day, 14, 0, 0, 0); finish = new DateTime(year, month, day, 17, 59, 59, 59); tc.addAttribute(TimexNames.type, TimexNames.TIME); tc.addAttribute(TimexNames.value, fmt.print(finish) + TimexNames.AFTERNOON); return tc; } else if (temp2.equals("evening")) { finish = start.minusDays(-1); year = finish.getYear(); month = finish.getMonthOfYear(); day = finish.getDayOfMonth(); start = new DateTime(year, month, day, 18, 0, 0, 0); finish = new DateTime(year, month, day, 20, 59, 59, 59); tc.addAttribute(TimexNames.type, TimexNames.TIME); tc.addAttribute(TimexNames.value, fmt.print(finish) + TimexNames.EVENING); return tc; } else if (temp2.equals("night")) { finish = start.minusDays(-1); year = finish.getYear(); month = finish.getMonthOfYear(); day = finish.getDayOfMonth(); start = new DateTime(year, month, day, 21, 0, 0, 0); finish = new DateTime(year, month, day, 23, 59, 59, 59); tc.addAttribute(TimexNames.type, TimexNames.TIME); tc.addAttribute(TimexNames.value, fmt.print(finish) + TimexNames.NIGHT); return tc; } else if (temp2.equals("spring")) { finish = start.minusYears(-1); year = finish.getYear(); start = new DateTime(year, 3, 1, 0, 0, 0, 0); finish = new DateTime(year, 5, 31, 23, 59, 59, 59); tc.addAttribute(TimexNames.value, fmt.print(finish) + "-" + TimexNames.SPRING); return tc; } else if (temp2.equals("summer")) { finish = start.minusYears(-1); year = finish.getYear(); start = new DateTime(year, 6, 1, 0, 0, 0, 0); finish = new DateTime(year, 8, 31, 23, 59, 59, 59); tc.addAttribute(TimexNames.value, fmt.print(finish) + "-" + TimexNames.MORNING); return tc; } else if (temp2.equals("fall")) { finish = start.minusYears(-1); year = finish.getYear(); start = new DateTime(year, 9, 1, 0, 0, 0, 0); finish = new DateTime(year, 11, 30, 23, 59, 59, 59); tc.addAttribute(TimexNames.value, fmt.print(finish) + "-" + TimexNames.FALL); return tc; } else if (temp2.equals("winter")) { year = start.getYear(); start = new DateTime(year, 12, 1, 0, 0, 0, 0); finish = new DateTime(year + 1, 2, 28, 23, 59, 59, 59); tc.addAttribute(TimexNames.value, fmt.print(finish) + "-" + TimexNames.WINTER); return tc; } else { String patternStr1 = monther; Pattern pattern1 = Pattern.compile(patternStr1); Matcher matcher1 = pattern1.matcher(temp2); boolean matchFound1 = matcher1.find(); if (matchFound1) { month = Integer.parseInt(temp.hm.get(temp2)); finish = start.minusYears(-1); year = finish.getYear(); finish = new DateTime(year, month, 1, 23, 59, 59, 59); finish = finish.dayOfMonth().withMaximumValue(); start = new DateTime(year, month, 1, 0, 0, 0, 0); tc.addAttribute(TimexNames.value, ymFmt.print(finish)); if (preflag == 2) { finish = new DateTime(year, month, 10, 23, 59, 59, 59); start = new DateTime(year, month, 1, 0, 0, 0, 0); tc.addAttribute(TimexNames.mod, TimexNames.START); } else if (preflag == 3) { start = new DateTime(year, month, 20, 0, 0, 0, 0); tc.addAttribute(TimexNames.mod, TimexNames.END); } return tc; } else { return null; } } } } } return null; }
From source file:edu.illinois.cs.cogcomp.temporal.normalizer.main.timex2interval.Period.java
License:Open Source License
/** * This function deals with a period of time with format the xxth day/month, etc * @param start the anchor time/*ww w . j a v a 2 s . c o m*/ * @param temporalPhrase * @return */ public static TimexChunk Periodrule(DateTime start, TemporalPhrase temporalPhrase) { int year; DateTime finish; String temp1; String temp2; Interval interval; interval = new Interval(start, start); String phrase = temporalPhrase.getPhrase(); phrase = phrase.toLowerCase(); DateTimeFormatter fmt = DateTimeFormat.forPattern("yyyy-MM-dd"); int modiword = 0;// 0 :no modified words 1:early,ealier 2:late,later // Handle some special cases TimexChunk tc = new TimexChunk(); tc.addAttribute(TimexNames.type, TimexNames.DATE); if (phrase.contains("now") || phrase.contains("currently") || phrase.contains("current") || phrase.contains("today")) { DateTime virtualStart = interval.getStart(); virtualStart = new DateTime(virtualStart.getYear(), virtualStart.getMonthOfYear(), virtualStart.getDayOfMonth(), virtualStart.getHourOfDay(), virtualStart.getMinuteOfHour(), virtualStart.getSecondOfMinute(), virtualStart.getMillisOfSecond() + 1); tc.addAttribute(TimexNames.value, TimexNames.PRESENT_REF); return tc; } if (phrase.contains("early") || phrase.contains("earlier")) { modiword = 1; } if (phrase.contains("late") || phrase.contains("later")) { modiword = 2; } String units = ""; for (String unitStr : dateUnitSet) { units = units + unitStr + "|"; } units += "s$"; String patternStr = "(?:the)?\\s*(\\d{1,4})(?:th|nd|st|rd)\\s*(" + units + ")\\s*"; Pattern pattern = Pattern.compile(patternStr); Matcher matcher = pattern.matcher(phrase); boolean matchFound = matcher.find(); if (matchFound) { temp1 = matcher.group(1); temp2 = matcher.group(2); String residual = StringUtils.difference(matcher.group(0), phrase); String anchorStr = ""; if (residual.length() > 0) { TemporalPhrase anchorPhrase = new TemporalPhrase(residual, temporalPhrase.getTense()); TimexChunk anchorTimex = TimexNormalizer.normalize(anchorPhrase); if (anchorTimex != null) { anchorStr = anchorTimex.getAttribute(TimexNames.value); } } if (temp2.equals("century")) { year = (Integer.parseInt(temp1) - 1) * 100; start = new DateTime(year, 1, 1, 0, 0, 0, 0); finish = new DateTime(year + 99, 12, 31, 23, 59, 59, 59); tc.addAttribute(TimexNames.value, String.valueOf(finish.getCenturyOfEra())); return tc; } else if (temp2.equals("decade")) { // e.g.: 3rd decade (of this century) // first we get this century is 20, then the 3rd decade is 203 int anchorCentury = start.getCenturyOfEra(); String val = String.valueOf(anchorCentury * 10 + temp1); tc.addAttribute(TimexNames.value, String.valueOf(val)); return tc; } else if (temp2.equals("year")) { int anchorCentury = start.getCenturyOfEra(); String val = String.valueOf(anchorCentury * 100 + temp1); tc.addAttribute(TimexNames.value, String.valueOf(val)); return tc; } else if (temp2.equals("quarter")) { int anchorYear = start.getYear(); String val = String.valueOf(anchorYear) + "-Q" + temp1; tc.addAttribute(TimexNames.value, String.valueOf(val)); return tc; } else if (temp2.equals("month")) { int anchorYear = start.getYear(); String monthStr = Integer.parseInt(temp1) < 10 ? "0" + temp1 : temp1; String val = String.valueOf(anchorYear) + "-" + monthStr; tc.addAttribute(TimexNames.value, String.valueOf(val)); return tc; } else if (temp2.equals("day")) { String val = ""; if (anchorStr.length() > 0) { List<String> normTimexList = Period.normTimexToList(anchorStr); String anchorYear = normTimexList.get(0); String anchorDate; String anchorMonth; if (normTimexList.size() == 1 || Integer.parseInt(temp1) > 31) { anchorMonth = "01"; } else { anchorMonth = normTimexList.get(1); } DateTime normDateTime = new DateTime(Integer.parseInt(anchorYear), Integer.parseInt(anchorMonth), 1, 0, 0); normDateTime = normDateTime.minusDays(-1 * Integer.parseInt(temp1)); anchorYear = String.valueOf(normDateTime.getYear()); anchorMonth = String.valueOf(normDateTime.getMonthOfYear()); anchorDate = String.valueOf(normDateTime.getDayOfMonth()); anchorMonth = anchorMonth.length() == 1 ? "0" + anchorMonth : anchorMonth; anchorDate = anchorDate.length() == 1 ? "0" + anchorDate : anchorDate; val = anchorYear + "-" + anchorMonth + "-" + anchorDate; } else { int month = Integer.parseInt(temp1) > 31 ? 1 : start.getMonthOfYear(); DateTime normDateTime = new DateTime(start.getYear(), month, 1, 0, 0); normDateTime = normDateTime.minusDays(-1 * Integer.parseInt(temp1)); String anchorYear = String.valueOf(normDateTime.getYear()); String anchorMonth = String.valueOf(normDateTime.getMonthOfYear()); String anchorDate = String.valueOf(normDateTime.getDayOfMonth()); anchorMonth = anchorMonth.length() == 1 ? "0" + anchorMonth : anchorMonth; anchorDate = anchorDate.length() == 1 ? "0" + anchorDate : anchorDate; val = String.valueOf(anchorYear) + "-" + anchorMonth + "-" + anchorDate; } tc.addAttribute(TimexNames.value, String.valueOf(val)); return tc; } else if (temp2.equals("s")) { if (Integer.parseInt(temp1) < 100) { year = start.getCenturyOfEra(); year = year * 100 + Integer.parseInt(temp1); if (modiword == 0) { tc.addAttribute(TimexNames.value, String.valueOf(year / 10)); } else if (modiword == 1) { tc.addAttribute(TimexNames.value, String.valueOf(year / 10)); tc.addAttribute(TimexNames.mod, TimexNames.START); } else if (modiword == 2) { tc.addAttribute(TimexNames.value, String.valueOf(year / 10)); tc.addAttribute(TimexNames.mod, TimexNames.END); } return tc; } else { if (modiword == 0) { start = new DateTime(Integer.parseInt(temp1), 1, 1, 0, 0, 0, 0); finish = new DateTime(Integer.parseInt(temp1) + 9, 12, 31, 23, 59, 59, 59); tc.addAttribute(TimexNames.value, String.valueOf(finish.getYear() / 10)); } else if (modiword == 1) { start = new DateTime(Integer.parseInt(temp1), 1, 1, 0, 0, 0, 0); finish = new DateTime(Integer.parseInt(temp1) + 3, 12, 31, 23, 59, 59, 59); tc.addAttribute(TimexNames.value, String.valueOf(finish.getYear() / 10)); tc.addAttribute(TimexNames.mod, TimexNames.START); } else if (modiword == 2) { start = new DateTime(Integer.parseInt(temp1) + 7, 1, 1, 0, 0, 0, 0); finish = new DateTime(Integer.parseInt(temp1) + 9, 12, 31, 23, 59, 59, 59); tc.addAttribute(TimexNames.value, String.valueOf(finish.getYear() / 10)); tc.addAttribute(TimexNames.mod, TimexNames.END); } return tc; } } } return null; }
From source file:edu.illinois.cs.cogcomp.temporal.normalizer.main.timex2interval.RelativeDate.java
License:Open Source License
/** * This function converts phrase that contains a relative date: more than xxx, etc * @param start anchor time//from ww w . j a v a 2 s . c om * @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:org.alfresco.repo.content.metadata.AbstractMappingMetadataExtracter.java
License:Open Source License
/** * Convert a date <tt>String</tt> to a <tt>Date</tt> object *///from w w w .j a v a 2s . co m protected Date makeDate(String dateStr) { if (dateStr == null || dateStr.length() == 0) { return null; } Date date = null; try { date = DefaultTypeConverter.INSTANCE.convert(Date.class, dateStr); } catch (TypeConversionException e) { // Try one of the other formats if (this.supportedDateFormatters != null) { // Remove text such as " (PDT)" which cannot be parsed. String dateStr2 = (dateStr == null || dateStr.indexOf('(') == -1) ? dateStr : dateStr.replaceAll(" \\(.*\\)", ""); for (DateTimeFormatter supportedDateFormatter : supportedDateFormatters) { // supported DateFormats were defined /** * Regional date format */ try { DateTime dateTime = supportedDateFormatter.parseDateTime(dateStr2); if (dateTime.getCenturyOfEra() > 0) { return dateTime.toDate(); } } catch (IllegalArgumentException e1) { // Didn't work } /** * Date format can be locale specific - make sure English format always works */ /* * TODO MER 25 May 2010 - Added this as a quick fix for IMAP date parsing which is always * English regardless of Locale. Some more thought and/or code is required to configure * the relationship between properties, format and locale. */ try { DateTime dateTime = supportedDateFormatter.withLocale(Locale.US).parseDateTime(dateStr2); if (dateTime.getCenturyOfEra() > 0) { return dateTime.toDate(); } } catch (IllegalArgumentException e1) { // Didn't work } } } if (date == null) { // Still no luck throw new TypeConversionException("Unable to convert string to date: " + dateStr); } } return date; }
From source file:org.ojbc.web.portal.controllers.helpers.DateTimePropertyEditor.java
License:RPL License
@Override public void setAsText(String text) throws IllegalArgumentException { if (StringUtils.isBlank(text)) { return;//from ww w .j av a2s . c o m } try { String[] tokens = text.trim().split("/"); //We defensively check for a two digit year date here even though the UI should never let it through //If date entered is of the format mm/dd/yy, and yy > current year + 10, then assume the prior century String yearAsString = tokens[2]; if ((yearAsString.length() != 2) && (yearAsString.length() != 4)) { throw new IllegalArgumentException("Unable to parse date"); } DateTime currentDate = new DateTime(); if (yearAsString.length() == 2) { int lastTwoDigitsOfCurrentYear = currentDate.getYearOfCentury(); int lastTwoDigitsOfEnteredDate = Integer.valueOf(yearAsString); if (lastTwoDigitsOfEnteredDate > lastTwoDigitsOfCurrentYear + 10) { yearAsString = String.valueOf(currentDate.minusYears(100).getCenturyOfEra()) + yearAsString; } else { yearAsString = String.valueOf(currentDate.getCenturyOfEra()) + yearAsString; } } this.setValue(new DateTime(Integer.valueOf(yearAsString), Integer.valueOf(tokens[0]), Integer.valueOf(tokens[1]), 0, 0, 0, 0)); } catch (RuntimeException ex) { throw new IllegalArgumentException("Unable to parse date"); } }