Class DateTool
- All Implemented Interfaces:
Serializable
- Direct Known Subclasses:
ComparisonDateTool
Tool for working with Date and Calendar
in Velocity templates. It is useful for accessing and
formatting the "current" date as well as for formatting
arbitrary Date and Calendar objects. Also
the tool can be used to retrieve DateFormat instances
or make conversions to and from various date types.
Possible formats include:
- 'short', 'medium', 'long', 'full' (from
DateFormat, optionally suffixed by '_date' or '_time' to get a date-only or time-only format - 'iso' for extended ISO 8601 without time zone (ex: '2016-11-24T10:27:30'), optionally suffixed by '_date' or '_time' to get a date-only or time-only format
- 'iso_tz', like 'iso' with time zone offset (ex: '2016-11-24T10:27:30+01:00'), optionally suffixed by '_time' to get a time-only format ('10:27:30+01:00')
- 'intl', like 'iso' but with a space separator between date and time (ex: '2016-11-24 10:27:30'), optionally suffixed by '_date' or '_time' to get a date-only or time-only format
- 'intl_tz', like 'intl' but with the time zone short id suffixed after another space (ex: '2016-11-24 10:27:30 CET'), optionally suffixed by '_time' to get a time-only format ('10:27:30+01:00')
- a custom format, as specified in
SimpleDateFormat
Example of formatting the "current" date:
$date -> Oct 19, 2003 9:54:50 PM
$date.long -> October 19, 2003 9:54:50 PM PDT
$date.medium_time -> 9:54:50 PM
$date.full_date -> Sunday, October 19, 2003
$date.get('default','short') -> Oct 19, 2003 9:54 PM
$date.get('yyyy-M-d H:m:s') -> 2003-10-19 21:54:50
$date.iso -> 2003-10-19T21:54:50-07:00
$date.iso_tz_time -> 21:54:50-07:00
$date.intl_tz -> 2003-10-19 21:54:50 CET
Example of formatting an arbitrary date:
$myDate -> Tue Oct 07 03:14:50 PDT 2003
$date.format('medium',$myDate) -> Oct 7, 2003 3:14:50 AM
Example tools.xml config (if you want to use this with VelocityView):
<tools>
<toolbox scope="application">
<tool class="org.apache.velocity.tools.generic.DateTool"
format="yyyy-MM-dd"/>
</toolbox>
</tools>
Should you need to use several formats, you can either use explicit formats by means of the toDate(format, date) method,
or you can declare several date tool instances with different formats.
The methods of this tool are highly interconnected, and overriding key methods provides an easy way to create subclasses that use a non-default format, calendar, locale, or timezone.
- Since:
- VelocityTools 1.0
- Version:
- $Revision$ $Date$
- Author:
- Nathan Bubna
- See Also:
-
Field Summary
FieldsModifier and TypeFieldDescriptionstatic final StringThe key used for specifying a default timezone via tool configuration.Fields inherited from class FormatConfig
DEFAULT_FORMAT, FORMAT_KEYFields inherited from class LocaleConfig
DEFAULT_LOCALEFields inherited from class SafeConfig
LOCK_CONFIG_KEY, log, LOGGER_NAME_KEY, SAFE_MODE_KEY, USE_CLASS_LOGGER_KEY -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionprotected voidconfigure(ValueParser values) Does the actual configuration.Converts the specified object to a date and formats it according to the pattern or style returned byFormatConfig.getFormat().Converts the specified object to a date and returns a formatted string representing that date in the locale returned byLocaleConfig.getLocale().Converts the specified object to a date and returns a formatted string representing that date in the specifiedLocale.Returns the specified date as a string formatted according to the specified date and/or time styles.Returns the specified date as a string formatted according to the specifiedLocaleand date and/or time styles.Returns the specified date as a string formatted according to the specifiedLocaleand date and/or time styles.Returns a formatted string representing the date returned bygetDate().Returns a formatted string representing the date and/or time given bygetDate()in standard, localized patterns.Returns aCalendarinstance created using the timezone and locale returned by getTimeZone() and getLocale().getDate()Returns aDatederived from the result ofgetCalendar()getDateFormat(String dateStyle, String timeStyle, Locale locale, TimeZone timezone) getDateFormat(String format, Locale locale, TimeZone timezone) getDay()getMonth()static final Calendarstatic final Datestatic final longReturns the configuredTimeZone.getYear()protected voidsetTimeZone(TimeZone timezone) Sets time zonetoCalendar(Object obj) Converts an object to an instance ofCalendarusing the format returned byFormatConfig.getFormat(), the locale returned byLocaleConfig.getLocale()and the time zone returned bygetTimeZone().toCalendar(Object obj, Locale locale) Converts an object to an instance ofCalendarusing the provided locale, the format returned byFormatConfig.getFormat()and the time zone returned bygetTimeZone().toCalendar(String format, Object obj) Converts an object to an instance ofCalendarusing the provided format, the locale returned byLocaleConfig.getLocale()and the time zone returned bygetTimeZone().toCalendar(String format, Object obj, Locale locale) Converts an object to an instance ofCalendarusing the provided format and locale, and the time zone returned bygetTimeZone().toCalendar(String format, Object obj, Locale locale, TimeZone timezone) Converts an object to an instance ofCalendarusing the provided format, locale and time zone.Converts an object to an instance ofDateusing the format returned byFormatConfig.getFormat(),theLocalereturned byLocaleConfig.getLocale(), and theTimeZonereturned bygetTimeZone()if the object is not already an instance of Date, Calendar, or Long.Converts an object to an instance ofDateusing the format returned byFormatConfig.getFormat(),the providedLocale, and theTimeZonereturned bygetTimeZone()if the object is not already an instance of Date, Calendar, or Long.Converts an object to an instance ofDateusing the format returned byFormatConfig.getFormat(),the providedLocale, andTimeZoneif the object is not already an instance of Date, Calendar, or Long.Converts an object to an instance ofDateusing the specified format,theLocalereturned byLocaleConfig.getLocale(), and theTimeZonereturned bygetTimeZone()if the object is not already an instance of Date, Calendar, or Long.toLocalizedPattern(String format, Locale locale) Returns a localized date format pattern for the given format.toString()Methods inherited from class FormatConfig
getFormat, setFormatMethods inherited from class LocaleConfig
getLocale, setLocale, toLocaleMethods inherited from class SafeConfig
configure, getLog, initLogger, isConfigLocked, isSafeMode, setLockConfig, setSafeMode
-
Field Details
-
TIMEZONE_KEY
The key used for specifying a default timezone via tool configuration.- See Also:
-
-
Constructor Details
-
DateTool
public DateTool()
-
-
Method Details
-
configure
Does the actual configuration. This is protected, so subclasses may share the same ValueParser and call configure at any time, while preventing templates from doing so when configure(Map) is locked.- Overrides:
configurein classFormatConfig- Parameters:
values- configuration values
-
setTimeZone
-
getSystemTime
public static final long getSystemTime()- Returns:
- the system's current time as the number of milliseconds elapsed since January 1, 1970, 00:00:00 GMT.
-
getSystemDate
-
getSystemCalendar
-
getTimeZone
Returns the configuredTimeZone. Default value is fromTimeZone.getDefault().- Returns:
- the configured
TimeZone
-
getDate
Returns aDatederived from the result ofgetCalendar()- Returns:
- a
Datederived from the result ofgetCalendar()
-
getCalendar
Returns aCalendarinstance created using the timezone and locale returned by getTimeZone() and getLocale(). This allows subclasses to easily override the default locale and timezone used by this tool.Sub-classes may override this method to return a Calendar instance not based on the system date. Doing so will also cause the getDate(), get(String), get(String,String), and toString() methods to return dates equivalent to the Calendar returned by this method, because those methods return values derived from the result of this method.
- Returns:
- a
Calendarinstance created using the results ofgetTimeZone()andLocaleConfig.getLocale(). - See Also:
-
getYear
- Returns:
- the year value of the date returned by
getCalendar(). - Since:
- VelocityTools 1.2
-
getYear
-
getMonth
- Returns:
- the month value of the date returned by
getCalendar(). - Since:
- VelocityTools 1.2
-
getMonth
-
getDay
- Returns:
- the day (of the month) value of the date
returned by
getCalendar().
NOTE: Unlike java.util.Date, this returns the day of the month. It is equivalent to Date.getDate() and Calendar.get(Calendar.DAY_OF_MONTH). We could not call this method getDate() because that already exists in this class with a different function. - Since:
- VelocityTools 1.2
-
getDay
- Parameters:
date- target date- Returns:
- the day (of the month) value for the specified date.
NOTE: Unlike java.util.Date, this returns the day of the month. It is equivalent to Date.getDate() and Calendar.get(Calendar.DAY_OF_MONTH). We could not call this method getDate() because that already exists in this class with a different function. - Since:
- VelocityTools 1.2
-
getValue
- Parameters:
field- target field- Returns:
- the specified value of the date returned by
getCalendar()or null if the field is invalid. - Since:
- VelocityTools 1.2
-
getValue
- Parameters:
field- the corresponding Integer value or String name of the desired valuedate- the date/calendar from which the field value will be taken- Returns:
- the specified value of the specified date, or null if the field or date is invalid. The field may be an Integer or it may be the name of the field as a String.
- Since:
- VelocityTools 1.2
-
getValue
- Parameters:
field- the int for the desired field (e.g. Calendar.MONTH)date- the date/calendar from which the field value will be taken- Returns:
- the specified value of the specified date, or null if the field or date is invalid.
- Since:
- VelocityTools 1.2
-
get
Returns a formatted string representing the date returned bygetDate(). In its default implementation, this method allows you to retrieve the current date in standard formats by simply doing things like$date.mediumor$date.full. If you want only the date or time portion you can specify that along with the standard formats. (e.g.$date.medium_dateor$date.short_time) More complex or custom formats can be retrieved by using the full method syntax. (e.g. $date.get('E, MMMM d'))- Parameters:
format- the formatting instructions- Returns:
- a formatted representation of the date returned by
getDate() - Since:
- VelocityTools 1.1
- See Also:
-
get
Returns a formatted string representing the date and/or time given bygetDate()in standard, localized patterns.- Parameters:
dateStyle- the style pattern for the datetimeStyle- the style pattern for the time- Returns:
- a formatted representation of the date returned by
getDate() - Since:
- VelocityTools 1.1
- See Also:
-
format
Converts the specified object to a date and formats it according to the pattern or style returned byFormatConfig.getFormat().- Parameters:
obj- the date object to be formatted- Returns:
- the specified date formatted as a string
- Since:
- VelocityTools 1.1
- See Also:
-
format
Converts the specified object to a date and returns a formatted string representing that date in the locale returned byLocaleConfig.getLocale().- Parameters:
format- the formatting instructionsobj- the date object to be formatted- Returns:
- a formatted string for this locale representing the specified
date or
nullif the parameters are invalid - See Also:
-
format
Converts the specified object to a date and returns a formatted string representing that date in the specifiedLocale.- Parameters:
format- the formatting instructionsobj- the date object to be formattedlocale- the locale to be used when formatting- Returns:
- the given date as a formatted string
- See Also:
-
format
Returns a formatted string representing the specified date,Locale, andTimeZone.The specified format may be a standard style pattern ('full', 'long', 'medium', 'short', or 'default') or extended style pattern ('iso', 'iso_tz', 'intl', 'intl_tz').
You may also specify that you want only the date or time portion be appending '_date' or '_time' respectively to the standard style pattern. (e.g. 'full_date', 'long_time', 'intl_date')
If the format fits neither of these patterns, then the output will be formatted according to the symbols defined by
SimpleDateFormat.Examples: "E, MMMM d" will result in "Tue, July 24" "EEE, M-d (H:m)" will result in "Tuesday, 7-24 (14:12)"- Parameters:
format- the custom or standard pattern to be usedobj- the date to formatlocale- theLocaleto format the date fortimezone- theTimeZoneto be used when formatting- Returns:
- a formatted string representing the specified date or
nullif the parameters are invalid - Since:
- VelocityTools 1.1
-
format
Returns the specified date as a string formatted according to the specified date and/or time styles.- Parameters:
dateStyle- the style pattern for the datetimeStyle- the style pattern for the timeobj- the date to be formatted- Returns:
- a formatted representation of the given date
- Since:
- VelocityTools 1.1
- See Also:
-
format
Returns the specified date as a string formatted according to the specifiedLocaleand date and/or time styles.- Parameters:
dateStyle- the style pattern for the datetimeStyle- the style pattern for the timeobj- the date to be formattedlocale- theLocaleto be used for formatting the date- Returns:
- a formatted representation of the given date
- Since:
- VelocityTools 1.1
- See Also:
-
format
public String format(String dateStyle, String timeStyle, Object obj, Locale locale, TimeZone timezone) Returns the specified date as a string formatted according to the specifiedLocaleand date and/or time styles.- Parameters:
dateStyle- the style pattern for the datetimeStyle- the style pattern for the timeobj- the date to be formattedlocale- theLocaleto be used for formatting the datetimezone- theTimeZonethe date should be formatted for- Returns:
- a formatted representation of the given date
- Since:
- VelocityTools 1.1
- See Also:
-
getDateFormat
Returns aDateFormatinstance for the specified format,Locale, andTimeZone. If the format specified is a standard style pattern, then a date-time instance will be returned with both the date and time styles set to the specified style. If it is a custom format, then a customizedSimpleDateFormatwill be returned.- Parameters:
format- the custom or standard formatting pattern to be usedlocale- theLocaleto be usedtimezone- theTimeZoneto be used- Returns:
- an instance of
DateFormat - Since:
- VelocityTools 1.1
- See Also:
-
getDateFormat
public DateFormat getDateFormat(String dateStyle, String timeStyle, Locale locale, TimeZone timezone) - Parameters:
dateStyle- the date styletimeStyle- the time stylelocale- theLocaleto be usedtimezone- theTimeZoneto be used- Returns:
- an instance of
DateFormat - Since:
- VelocityTools 1.1
- See Also:
-
toDate
Converts an object to an instance ofDateusing the format returned byFormatConfig.getFormat(),theLocalereturned byLocaleConfig.getLocale(), and theTimeZonereturned bygetTimeZone()if the object is not already an instance of Date, Calendar, or Long.- Parameters:
obj- the date to convert- Returns:
- the object as a
Dateornullif no conversion is possible
-
toDate
Converts an object to an instance ofDateusing the format returned byFormatConfig.getFormat(),the providedLocale, and theTimeZonereturned bygetTimeZone()if the object is not already an instance of Date, Calendar, or Long. -
toDate
Converts an object to an instance ofDateusing the format returned byFormatConfig.getFormat(),the providedLocale, andTimeZoneif the object is not already an instance of Date, Calendar, or Long. -
toDate
Converts an object to an instance ofDateusing the specified format,theLocalereturned byLocaleConfig.getLocale(), and theTimeZonereturned bygetTimeZone()if the object is not already an instance of Date, Calendar, or Long.- Parameters:
format- - the format the date is inobj- - the date to convert- Returns:
- the object as a
Dateornullif no conversion is possible - See Also:
-
toDate
-
toDate
-
toCalendar
Converts an object to an instance ofCalendarusing the format returned byFormatConfig.getFormat(), the locale returned byLocaleConfig.getLocale()and the time zone returned bygetTimeZone().- Parameters:
obj- the date to convert- Returns:
- the converted date
- See Also:
-
toCalendar
Converts an object to an instance ofCalendarusing the provided locale, the format returned byFormatConfig.getFormat()and the time zone returned bygetTimeZone().- Parameters:
obj- the date to convertlocale- the locale used- Returns:
- the converted date
- See Also:
-
toCalendar
Converts an object to an instance ofCalendarusing the provided format, the locale returned byLocaleConfig.getLocale()and the time zone returned bygetTimeZone().- Parameters:
format- the format to useobj- the date to convert- Returns:
- the converted date
- See Also:
-
toCalendar
Converts an object to an instance ofCalendarusing the provided format and locale, and the time zone returned bygetTimeZone().- Parameters:
format- the provided formatobj- the date to convertlocale- the locale used- Returns:
- the converted date
- See Also:
-
toCalendar
Converts an object to an instance ofCalendarusing the provided format, locale and time zone.- Parameters:
format- the provided formatobj- the date to convertlocale- the locale usedtimezone- the time zone used- Returns:
- the converted date
- See Also:
-
toLocalizedPattern
Returns a localized date format pattern for the given format. SimpleDateFormat uses patterns that are based upon English words (such as Month = M, Day = d, and Year = y). When displaying a format pattern to readers of other languages, it is appropriate to display these patterns using their localized expectations. For instance, the date pattern yyyy-MM-dd should, for French speakers appear as "aaaa-MM-jj".SimpleDateFormat.toLocalizedPattern()provides this functionality, and this method merely calls that on an appropriately-constructed SimpleDateFormat object.- Parameters:
format- the custom or standard pattern to convertlocale- theLocaleto format for pattern for- Returns:
- a format string appropriate for the specified Locale
- Since:
- VelocityTools 2.0
-
toString
- Overrides:
toStringin classObject- Returns:
- the result of
getDate()formatted according to the result ofFormatConfig.getFormat(). - See Also:
-