public class DateMathParser extends Object
The basic syntax support addition, subtraction and rounding at various levels of granularity (or "units"). Commands can be chained together and are parsed from left to right. '+' and '-' denote addition and subtraction, while '/' denotes "round". Round requires only a unit, while addition/subtraction require an integer value and a unit. Command strings must not include white space, but the "No-Op" command (empty string) is allowed....
   /HOUR
      ... Round to the start of the current hour
   /DAY
      ... Round to the start of the current day
   +2YEARS
      ... Exactly two years in the future from now
   -1DAY
      ... Exactly 1 day prior to now
   /DAY+6MONTHS+3DAYS
      ... 6 months and 3 days in the future from the start of
          the current day
   +6MONTHS+3DAYS/DAY
      ... 6 months and 3 days in the future from now, rounded
          down to nearest day
 
 
 (Multiple aliases exist for the various units of time (ie:
 MINUTE and MINUTES; MILLI,
 MILLIS, MILLISECOND, and
 MILLISECONDS.)  The complete list can be found by
 inspecting the keySet of CALENDAR_UNITS)
 
 All commands are relative to a "now" which is fixed in an instance of
 DateMathParser such that
 p.parseMath("+0MILLISECOND").equals(p.parseMath("+0MILLISECOND"))
 no matter how many wall clock milliseconds elapse between the two
 distinct calls to parse (Assuming no other thread calls
 "setNow" in the interim).  The default value of 'now' is 
 the time at the moment the DateMathParser instance is 
 constructed, unless overridden by the NOW
 request param.
 
 All commands are also affected to the rules of a specified TimeZone
 (including the start/end of DST if any) which determine when each arbitrary 
 day starts.  This not only impacts rounding/adding of DAYs, but also 
 cascades to rounding of HOUR, MIN, MONTH, YEAR as well.  The default 
 TimeZone used is UTC unless  overridden by the 
 TZ
 request param.
 
   Historical dates:  The calendar computation is completely done with the
   Gregorian system/algorithm.  It does not switch to Julian or
   anything else, unlike the default GregorianCalendar.
 
| Modifier and Type | Field and Description | 
|---|---|
| static Map<String,ChronoUnit> | CALENDAR_UNITSA mapping from (uppercased) String labels identifying time units,
 to the corresponding  ChronoUnitenum (e.g. | 
| static TimeZone | DEFAULT_MATH_TZDefault TimeZone for DateMath rounding (UTC) | 
| static DateTimeFormatter | PARSERDiffers by  DateTimeFormatter.ISO_INSTANTin that it's lenient. | 
| static TimeZone | UTC | 
| Constructor and Description | 
|---|
| DateMathParser()Chooses defaults based on the current request. | 
| DateMathParser(Date now,
              TimeZone tz) | 
| DateMathParser(TimeZone tz) | 
| Modifier and Type | Method and Description | 
|---|---|
| Date | getNow()Returns a clone of this instance's concept of "now" (never null). | 
| TimeZone | getTimeZone() | 
| static Date | parseMath(Date now,
         String val)Parses a String which may be a date (in the standard ISO-8601 format)
 followed by an optional math expression. | 
| static Date | parseMath(Date now,
         String val,
         TimeZone zone)Parses a String which may be a date (in the standard ISO-8601 format)
 followed by an optional math expression. | 
| Date | parseMath(String math)Parses a string of commands relative "now" are returns the resulting Date. | 
| void | setNow(Date n)Defines this instance's concept of "now". | 
public static final TimeZone UTC
public static final TimeZone DEFAULT_MATH_TZ
public static final DateTimeFormatter PARSER
DateTimeFormatter.ISO_INSTANT in that it's lenient.parseNoMath(String)public static final Map<String,ChronoUnit> CALENDAR_UNITS
ChronoUnit enum (e.g. "YEARS") used to
 set/add/roll that unit of measurement.
 
 A single logical unit of time might be represented by multiple labels
 for convenience (ie: DATE==DAYS,
 MILLI==MILLIS)
 
Calendarpublic DateMathParser()
public DateMathParser(TimeZone tz)
public DateMathParser(Date now, TimeZone tz)
now - The current time. If null, it defaults to SolrRequestInfo.getNOW().
            otherwise the current time is assumed.tz - The TimeZone used for rounding (to determine when hours/days begin).  If null, then this method defaults
           to the value dictated by the SolrRequestInfo if it exists -- otherwise it uses UTC.DEFAULT_MATH_TZ, 
Calendar.getInstance(TimeZone,Locale), 
SolrRequestInfo.getClientTimeZone()public static Date parseMath(Date now, String val)
TZ param retrieved via SolrRequestInfo, defaulting to UTC.now - an optional fixed date to use as "NOW". SolrRequestInfo is consulted if unspecified.val - the string to parsepublic static Date parseMath(Date now, String val, TimeZone zone)
now - an optional fixed date to use as "NOW"val - the string to parsezone - the timezone to usepublic TimeZone getTimeZone()
public Date getNow()
setNow(java.util.Date), 
SolrRequestInfo.getNOW()public Date parseMath(String math) throws ParseException
ParseException - positions in ParseExceptions are token positions, not character positions.Copyright © 2000-2018 Apache Software Foundation. All Rights Reserved.