Package org.apache.log4j.pattern
Class CachedDateFormat
- java.lang.Object
-
- java.text.Format
-
- java.text.DateFormat
-
- org.apache.log4j.pattern.CachedDateFormat
-
- All Implemented Interfaces:
java.io.Serializable
,java.lang.Cloneable
public final class CachedDateFormat extends java.text.DateFormat
CachedDateFormat optimizes the performance of a wrapped DateFormat. The implementation is not thread-safe. If the millisecond pattern is not recognized, the class will only use the cache if the same value is requested.- See Also:
- Serialized Form
-
-
Field Summary
Fields Modifier and Type Field Description private java.lang.StringBuffer
cache
Cache of previous conversion.private static java.lang.String
DIGITS
Supported digit set.private int
expiration
Maximum validity period for the cache.private java.text.DateFormat
formatter
Wrapped formatter.private static int
MAGIC1
First magic number used to detect the millisecond position.private static int
MAGIC2
Second magic number used to detect the millisecond position.private static java.lang.String
MAGICSTRING1
Expected representation of first magic number.private static java.lang.String
MAGICSTRING2
Expected representation of second magic number.private int
millisecondStart
Index of initial digit of millisecond pattern or UNRECOGNIZED_MILLISECONDS or NO_MILLISECONDS.static int
NO_MILLISECONDS
Constant used to represent that there was no change observed when changing the millisecond count.private long
previousTime
Date requested in previous conversion.private static long
serialVersionUID
Serialization version.private long
slotBegin
Integral second preceding the previous convered Date.private java.util.Date
tmpDate
Scratch date object used to minimize date object creation.static int
UNRECOGNIZED_MILLISECONDS
Constant used to represent that there was an observed change, but was an expected change.private static java.lang.String
ZERO_STRING
Expected representation of 0 milliseconds.-
Fields inherited from class java.text.DateFormat
AM_PM_FIELD, calendar, DATE_FIELD, DAY_OF_WEEK_FIELD, DAY_OF_WEEK_IN_MONTH_FIELD, DAY_OF_YEAR_FIELD, DEFAULT, ERA_FIELD, FULL, HOUR_OF_DAY0_FIELD, HOUR_OF_DAY1_FIELD, HOUR0_FIELD, HOUR1_FIELD, LONG, MEDIUM, MILLISECOND_FIELD, MINUTE_FIELD, MONTH_FIELD, numberFormat, SECOND_FIELD, SHORT, TIMEZONE_FIELD, WEEK_OF_MONTH_FIELD, WEEK_OF_YEAR_FIELD, YEAR_FIELD
-
-
Constructor Summary
Constructors Constructor Description CachedDateFormat(java.text.DateFormat dateFormat, int expiration)
Creates a new CachedDateFormat object.
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description static int
findMillisecondStart(long time, java.lang.String formatted, java.text.DateFormat formatter)
Finds start of millisecond field in formatted time.java.lang.StringBuffer
format(long now, java.lang.StringBuffer buf)
Formats a millisecond count into a date/time string.java.lang.StringBuffer
format(java.util.Date date, java.lang.StringBuffer sbuf, java.text.FieldPosition fieldPosition)
Formats a Date into a date/time string.static int
getMaximumCacheValidity(java.lang.String pattern)
Gets maximum cache validity for the specified SimpleDateTime conversion pattern.java.text.NumberFormat
getNumberFormat()
Gets number formatter.private static void
millisecondFormat(int millis, java.lang.StringBuffer buf, int offset)
Formats a count of milliseconds (0-999) into a numeric representation.java.util.Date
parse(java.lang.String s, java.text.ParsePosition pos)
This method is delegated to the formatter which most likely returns null.void
setTimeZone(java.util.TimeZone timeZone)
Set timezone.-
Methods inherited from class java.text.DateFormat
clone, equals, format, format, getAvailableLocales, getCalendar, getDateInstance, getDateInstance, getDateInstance, getDateTimeInstance, getDateTimeInstance, getDateTimeInstance, getInstance, getTimeInstance, getTimeInstance, getTimeInstance, getTimeZone, hashCode, isLenient, parse, parseObject, setCalendar, setLenient, setNumberFormat
-
-
-
-
Field Detail
-
serialVersionUID
private static final long serialVersionUID
Serialization version.- See Also:
- Constant Field Values
-
NO_MILLISECONDS
public static final int NO_MILLISECONDS
Constant used to represent that there was no change observed when changing the millisecond count.- See Also:
- Constant Field Values
-
DIGITS
private static final java.lang.String DIGITS
Supported digit set. If the wrapped DateFormat uses a different unit set, the millisecond pattern will not be recognized and duplicate requests will use the cache.- See Also:
- Constant Field Values
-
UNRECOGNIZED_MILLISECONDS
public static final int UNRECOGNIZED_MILLISECONDS
Constant used to represent that there was an observed change, but was an expected change.- See Also:
- Constant Field Values
-
MAGIC1
private static final int MAGIC1
First magic number used to detect the millisecond position.- See Also:
- Constant Field Values
-
MAGICSTRING1
private static final java.lang.String MAGICSTRING1
Expected representation of first magic number.- See Also:
- Constant Field Values
-
MAGIC2
private static final int MAGIC2
Second magic number used to detect the millisecond position.- See Also:
- Constant Field Values
-
MAGICSTRING2
private static final java.lang.String MAGICSTRING2
Expected representation of second magic number.- See Also:
- Constant Field Values
-
ZERO_STRING
private static final java.lang.String ZERO_STRING
Expected representation of 0 milliseconds.- See Also:
- Constant Field Values
-
formatter
private final java.text.DateFormat formatter
Wrapped formatter.
-
millisecondStart
private int millisecondStart
Index of initial digit of millisecond pattern or UNRECOGNIZED_MILLISECONDS or NO_MILLISECONDS.
-
slotBegin
private long slotBegin
Integral second preceding the previous convered Date.
-
cache
private java.lang.StringBuffer cache
Cache of previous conversion.
-
expiration
private final int expiration
Maximum validity period for the cache. Typically 1, use cache for duplicate requests only, or 1000, use cache for requests within the same integral second.
-
previousTime
private long previousTime
Date requested in previous conversion.
-
tmpDate
private final java.util.Date tmpDate
Scratch date object used to minimize date object creation.
-
-
Constructor Detail
-
CachedDateFormat
public CachedDateFormat(java.text.DateFormat dateFormat, int expiration)
Creates a new CachedDateFormat object.- Parameters:
dateFormat
- Date format, may not be null.expiration
- maximum cached range in milliseconds. If the dateFormat is known to be incompatible with the caching algorithm, use a value of 0 to totally disable caching or 1 to only use cache for duplicate requests.
-
-
Method Detail
-
findMillisecondStart
public static int findMillisecondStart(long time, java.lang.String formatted, java.text.DateFormat formatter)
Finds start of millisecond field in formatted time.- Parameters:
time
- long time, must be integral number of secondsformatted
- String corresponding formatted stringformatter
- DateFormat date format- Returns:
- int position in string of first digit of milliseconds, -1 indicates no millisecond field, -2 indicates unrecognized field (likely RelativeTimeDateFormat)
-
format
public java.lang.StringBuffer format(java.util.Date date, java.lang.StringBuffer sbuf, java.text.FieldPosition fieldPosition)
Formats a Date into a date/time string.- Specified by:
format
in classjava.text.DateFormat
- Parameters:
date
- the date to format.sbuf
- the string buffer to write to.fieldPosition
- remains untouched.- Returns:
- the formatted time string.
-
format
public java.lang.StringBuffer format(long now, java.lang.StringBuffer buf)
Formats a millisecond count into a date/time string.- Parameters:
now
- Number of milliseconds after midnight 1 Jan 1970 GMT.buf
- the string buffer to write to.- Returns:
- the formatted time string.
-
millisecondFormat
private static void millisecondFormat(int millis, java.lang.StringBuffer buf, int offset)
Formats a count of milliseconds (0-999) into a numeric representation.- Parameters:
millis
- Millisecond coun between 0 and 999.buf
- String buffer, may not be null.offset
- Starting position in buffer, the length of the buffer must be at least offset + 3.
-
setTimeZone
public void setTimeZone(java.util.TimeZone timeZone)
Set timezone. Setting the timezone using getCalendar().setTimeZone() will likely cause caching to misbehave.- Overrides:
setTimeZone
in classjava.text.DateFormat
- Parameters:
timeZone
- TimeZone new timezone
-
parse
public java.util.Date parse(java.lang.String s, java.text.ParsePosition pos)
This method is delegated to the formatter which most likely returns null.- Specified by:
parse
in classjava.text.DateFormat
- Parameters:
s
- string representation of date.pos
- field position, unused.- Returns:
- parsed date, likely null.
-
getNumberFormat
public java.text.NumberFormat getNumberFormat()
Gets number formatter.- Overrides:
getNumberFormat
in classjava.text.DateFormat
- Returns:
- NumberFormat number formatter
-
getMaximumCacheValidity
public static int getMaximumCacheValidity(java.lang.String pattern)
Gets maximum cache validity for the specified SimpleDateTime conversion pattern.- Parameters:
pattern
- conversion pattern, may not be null.- Returns:
- Duration in milliseconds from an integral second that the cache will return consistent results.
-
-