Class FastDateParser
- All Implemented Interfaces:
Serializable,DateParser
SimpleDateFormat.
To obtain a proxy to a FastDateParser, use FastDateFormat.getInstance(String, TimeZone, Locale) or another variation of the factory methods of
FastDateFormat.
Since FastDateParser is thread safe, you can use a static member instance:
private static final DateParser DATE_PARSER = FastDateFormat.getInstance("yyyy-MM-dd");
This class can be used as a direct replacement for SimpleDateFormat in most parsing situations. This class is especially useful in multi-threaded
server environments. SimpleDateFormat is not thread-safe in any JDK version, nor will it be as Sun has closed the
bug/RFE.
Only parsing is supported by this class, but all patterns are compatible with SimpleDateFormat.
The class operates in lenient mode, so for example a time of 90 minutes is treated as 1 hour 30 minutes.
Timing tests indicate this class is as about as fast as SimpleDateFormat in single thread applications and about 25% faster in multi-thread applications.
- Since:
- 3.2
- See Also:
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionprivate static final classA strategy that handles a text field in the parsing patternprivate static final classA strategy that copies the static or quoted field in the parsing patternprivate static final classprivate static classA strategy that handles a number field in the parsing patternprivate static classA strategy to parse a single field from the parsing patternprivate static classA strategy to parse a single field from the parsing patternprivate static final classHolds strategy and field widthprivate final classParse format into Strategies(package private) static classA strategy that handles a time zone field in the parsing pattern -
Field Summary
FieldsModifier and TypeFieldDescriptionprivate static final FastDateParser.Strategyprivate static final ConcurrentMap<Locale,FastDateParser.Strategy>[] private final intCentury from Date.private static final FastDateParser.Strategyprivate static final FastDateParser.Strategyprivate static final FastDateParser.Strategyprivate static final FastDateParser.Strategyprivate static final FastDateParser.Strategyprivate static final FastDateParser.Strategyprivate static final FastDateParser.Strategyprivate static final FastDateParser.Strategy(package private) static final Localeprivate static final FastDateParser.Strategyprivate final LocaleInput Locale.private static final Comparator<String> comparator used to sort regex alternatives.private static final FastDateParser.Strategyprivate static final FastDateParser.Strategyprivate static final FastDateParser.Strategyprivate final StringInput pattern.private List<FastDateParser.StrategyAndWidth> Initialized from Calendar.private static final FastDateParser.Strategyprivate static final longRequired for serialization support.private final intStart year from Date.private final TimeZoneInput TimeZone.private static final FastDateParser.Strategyprivate static final FastDateParser.Strategy -
Constructor Summary
ConstructorsModifierConstructorDescriptionprotectedFastDateParser(String pattern, TimeZone timeZone, Locale locale) Constructs a new FastDateParser.protectedFastDateParser(String pattern, TimeZone timeZone, Locale locale, Date centuryStart) Constructs a new FastDateParser. -
Method Summary
Modifier and TypeMethodDescriptionprivate intadjustYear(int twoDigitYear) Adjusts dates to be within appropriate centuryappendDisplayNames(Calendar calendar, Locale locale, int field, StringBuilder regex) Gets the short and long values displayed for a fieldbooleanCompares another object for equality with this object.private static ConcurrentMap<Locale, FastDateParser.Strategy> getCache(int field) Gets a cache of Strategies for a particular fieldGets the locale used by this parser.private FastDateParser.StrategygetLocaleSpecificStrategy(int field, Calendar definingCalendar) Constructs a Strategy that parses a Text fieldGets the pattern used by this parser.private FastDateParser.StrategygetStrategy(char f, int width, Calendar definingCalendar) Gets a Strategy given a field from a SimpleDateFormat patternGets the time zone used by this parser.inthashCode()Returns a hash code compatible with equals.private voidInitializes derived fields from defining fields.private static booleanisFormatLetter(char c) Equivalent to DateFormat.parse(String).parse(String source, ParsePosition pos) This implementation updates the ParsePosition if the parse succeeds.booleanparse(String source, ParsePosition pos, Calendar calendar) Parses a formatted date string according to the format.parseObject(String source) Parses text from a string to produce a Date.parseObject(String source, ParsePosition pos) Parses a date/time string according to the given parse position.private voidCreates the object after serialization.private static StringBuildersimpleQuote(StringBuilder sb, String value) toString()Gets a string version of this formatter.Converts all state of this instance to a String handy for debugging.
-
Field Details
-
serialVersionUID
private static final long serialVersionUIDRequired for serialization support.- See Also:
-
JAPANESE_IMPERIAL
-
LONGER_FIRST_LOWERCASE
comparator used to sort regex alternatives. Alternatives should be ordered longer first, and shorter last. ('february' before 'feb'). All entries must be lower-case by locale. -
caches
-
ABBREVIATED_YEAR_STRATEGY
-
NUMBER_MONTH_STRATEGY
-
LITERAL_YEAR_STRATEGY
-
WEEK_OF_YEAR_STRATEGY
-
WEEK_OF_MONTH_STRATEGY
-
DAY_OF_YEAR_STRATEGY
-
DAY_OF_MONTH_STRATEGY
-
DAY_OF_WEEK_STRATEGY
-
DAY_OF_WEEK_IN_MONTH_STRATEGY
-
HOUR_OF_DAY_STRATEGY
-
HOUR24_OF_DAY_STRATEGY
-
HOUR12_STRATEGY
-
HOUR_STRATEGY
-
MINUTE_STRATEGY
-
SECOND_STRATEGY
-
MILLISECOND_STRATEGY
-
pattern
Input pattern. -
timeZone
Input TimeZone. -
locale
Input Locale. -
century
private final int centuryCentury from Date. -
startYear
private final int startYearStart year from Date. -
patterns
Initialized from Calendar.
-
-
Constructor Details
-
FastDateParser
Constructs a new FastDateParser. UseFastDateFormat.getInstance(String, TimeZone, Locale)or another variation of the factory methods ofFastDateFormatto get a cached FastDateParser instance.- Parameters:
pattern- non-nullSimpleDateFormatcompatible patterntimeZone- non-null time zone to uselocale- non-null locale
-
FastDateParser
Constructs a new FastDateParser.- Parameters:
pattern- non-nullSimpleDateFormatcompatible patterntimeZone- non-null time zone to uselocale- locale, null maps to the default Locale.centuryStart- The start of the century for 2 digit year parsing- Since:
- 3.5
-
-
Method Details
-
appendDisplayNames
private static Map<String,Integer> appendDisplayNames(Calendar calendar, Locale locale, int field, StringBuilder regex) Gets the short and long values displayed for a field- Parameters:
calendar- The calendar to obtain the short and long valueslocale- The locale of display namesfield- The field of interestregex- The regular expression to build- Returns:
- The map of string display names to field values
-
getCache
Gets a cache of Strategies for a particular field- Parameters:
field- The Calendar field- Returns:
- a cache of Locale to Strategy
-
isFormatLetter
private static boolean isFormatLetter(char c) -
simpleQuote
-
adjustYear
private int adjustYear(int twoDigitYear) Adjusts dates to be within appropriate century- Parameters:
twoDigitYear- The year to adjust- Returns:
- A value between centuryStart(inclusive) to centuryStart+100(exclusive)
-
equals
Compares another object for equality with this object. -
getLocale
Description copied from interface:DateParserGets the locale used by this parser.- Specified by:
getLocalein interfaceDateParser- Returns:
- the locale
-
getLocaleSpecificStrategy
Constructs a Strategy that parses a Text field- Parameters:
field- The Calendar fielddefiningCalendar- The calendar to obtain the short and long values- Returns:
- a TextStrategy for the field and Locale
-
getPattern
Description copied from interface:DateParserGets the pattern used by this parser.- Specified by:
getPatternin interfaceDateParser- Returns:
- the pattern,
SimpleDateFormatcompatible
-
getStrategy
Gets a Strategy given a field from a SimpleDateFormat pattern- Parameters:
f- A sub-sequence of the SimpleDateFormat patternwidth- formatting widthdefiningCalendar- The calendar to obtain the short and long values- Returns:
- The Strategy that will handle parsing for the field
-
getTimeZone
Description copied from interface:DateParserGets the time zone used by this parser.The default
TimeZoneused to create aDatewhen theTimeZoneis not specified by the format pattern.- Specified by:
getTimeZonein interfaceDateParser- Returns:
- the time zone
-
hashCode
public int hashCode()Returns a hash code compatible with equals. -
init
Initializes derived fields from defining fields. This is called from constructor and from readObject (de-serialization)- Parameters:
definingCalendar- theCalendarinstance used to initialize this FastDateParser
-
parse
Description copied from interface:DateParserEquivalent to DateFormat.parse(String). SeeDateFormat.parse(String)for more information.- Specified by:
parsein interfaceDateParser- Parameters:
source- AStringwhose beginning should be parsed.- Returns:
- A
Dateparsed from the string - Throws:
ParseException- if the beginning of the specified string cannot be parsed.
-
parse
This implementation updates the ParsePosition if the parse succeeds. However, it sets the error index to the position before the failed field unlike the methodSimpleDateFormat.parse(String, ParsePosition)which sets the error index to after the failed field.To determine if the parse has succeeded, the caller must check if the current parse position given by
ParsePosition.getIndex()has been updated. If the input buffer has been fully parsed, then the index will point to just after the end of the input buffer.- Specified by:
parsein interfaceDateParser- Parameters:
source- AString, part of which should be parsed.pos- AParsePositionobject with index and error index information as described above.- Returns:
- A
Dateparsed from the string. In case of error, returns null. - See Also:
-
parse
Parses a formatted date string according to the format. Updates the Calendar with parsed fields. Upon success, the ParsePosition index is updated to indicate how much of the source text was consumed. Not all source text needs to be consumed. Upon parse failure, ParsePosition error index is updated to the offset of the source text which does not match the supplied format.- Specified by:
parsein interfaceDateParser- Parameters:
source- The text to parse.pos- On input, the position in the source to start parsing, on output, updated position.calendar- The calendar into which to set parsed fields.- Returns:
- true, if source has been parsed (pos parsePosition is updated); otherwise false (and pos errorIndex is updated)
- Throws:
IllegalArgumentException- when Calendar has been set to be not lenient, and a parsed field is out of range.
-
parseObject
Description copied from interface:DateParserParses text from a string to produce a Date.- Specified by:
parseObjectin interfaceDateParser- Parameters:
source- AStringwhose beginning should be parsed.- Returns:
- a
java.util.Dateobject - Throws:
ParseException- if the beginning of the specified string cannot be parsed.- See Also:
-
parseObject
Description copied from interface:DateParserParses a date/time string according to the given parse position.- Specified by:
parseObjectin interfaceDateParser- Parameters:
source- AStringwhose beginning should be parsed.pos- the parse position- Returns:
- a
java.util.Dateobject - See Also:
-
readObject
Creates the object after serialization. This implementation reinitializes the transient properties.- Parameters:
in- ObjectInputStream from which the object is being deserialized.- Throws:
IOException- if there is an IO issue.ClassNotFoundException- if a class cannot be found.
-
toString
Gets a string version of this formatter. -
toStringAll
Converts all state of this instance to a String handy for debugging.- Returns:
- a string.
- Since:
- 3.12.0
-