Package org.apache.struts2.components

# Class Date

java.lang.Object
org.apache.struts2.components.Component
org.apache.struts2.components.ContextBean
org.apache.struts2.components.Date

public class Date extends ContextBean

Format Date object in different ways.

The date tag will allow you to format a Date in a quick and easy way. You can specify a custom format (eg. "dd/MM/yyyy hh:mm"), you can generate easy readable notations (like "in 2 hours, 14 minutes"), or you can just fall back on a predefined format with key 'struts.date.format' in your properties file.

If that key is not defined, it will finally fall back to the default DateFormat.MEDIUM formatting.

Note: If the requested Date object isn't found on the stack, a blank will be returned.

Note: Since Struts 6.0.0 a new Java 8 API has been used to format the Date, it's based on DateTimeFormatter which uses a bit different patterns.

Configurable attributes are:

- name
- nice
- format

Following how the date component will work, depending on the value of nice attribute (which by default is false) and the format attribute.

Condition 1: With nice attribute as true

i18n key | default
struts.date.format.past | {0} ago
struts.date.format.future | in {0}
struts.date.format.seconds | an instant
struts.date.format.minutes | {0,choice,1#one minute|1<{0} minutes}
struts.date.format.hours | {0,choice,1#one hour|1<{0} hours}{1,choice,0#|1#, one minute|1<, {1} minutes}
struts.date.format.days | {0,choice,1#one day|1<{0} days}{1,choice,0#|1#, one hour|1<, {1} hours}
struts.date.format.years | {0,choice,1#one year|1<{0} years}{1,choice,0#|1#, one day|1<, {1} days}

Condition 2: With nice attribute as false and format attribute is specified eg. dd/MM/yyyyy

In this case the format attribute will be used.

Condition 3: With nice attribute as false and no format attribute is specified

i18n key | default
struts.date.format | if one is not found DateFormat.MEDIUM format will be used

Examples

      <s:date name="person.birthday" format="dd/MM/yyyy" />
      <s:date name="person.birthday" format="%{getText('some.i18n.key')}" />
      <s:date name="person.birthday" nice="true" />
      <s:date name="person.birthday" />

`Date`

- ## Field Summary

  Fields
  Modifier and Type
  Field
  Description
  `static final String`
  `DATETAG_PROPERTY`
  Property name to fall back when no format is specified
  `static final String`
  `DATETAG_PROPERTY_DAYS`
  Property name that defines the days notation (default: {0,choice,1#one day|1<{0} days}{1,choice,0#|1#, one hour|1<, {1} hours})
  `static final String`
  `DATETAG_PROPERTY_FUTURE`
  Property name that defines the future notation (default: in {0})
  `static final String`
  `DATETAG_PROPERTY_HOURS`
  Property name that defines the hours notation (default: {0,choice,1#one hour|1<{0} hours}{1,choice,0#|1#, one minute|1>, {1} minutes})
  `static final String`
  `DATETAG_PROPERTY_MINUTES`
  Property name that defines the minutes notation (default: {0,choice,1#one minute|1<{0} minutes})
  `static final String`
  `DATETAG_PROPERTY_PAST`
  Property name that defines the past notation (default: {0} ago)
  `static final String`
  `DATETAG_PROPERTY_SECONDS`
  Property name that defines the seconds notation (default: in instant)
  `static final String`
  `DATETAG_PROPERTY_YEARS`
  Property name that defines the years notation (default: {0,choice,1#one year|1<{0} years}{1,choice,0#|1#, one day|1>, {1} days})

  ### Fields inherited from class org.apache.struts2.components.ContextBean

  `var`

  ### Fields inherited from class org.apache.struts2.components.Component

  `actionMapper, attributes, COMPONENT_STACK, devMode, escapeHtmlBody, performClearTagStateForTagPoolingServers, stack, standardAttributesMap, throwExceptionOnELFailure`

- ## Constructor Summary

  Constructors
  Constructor
  Description
  `Date(ValueStack stack)`

- ## Method Summary

  Modifier and Type
  Method
  Description
  `boolean`
  `end(Writer writer, String body)`
  Callback for the end tag of this component.
  `String`
  `formatTime(TextProvider tp, ZonedDateTime date)`
  Calculates the difference in time from now to the given date, and outputs it nicely.
  `String`
  `getFormat()`
  `String`
  `getName()`
  `String`
  `getTimezone()`
  `boolean`
  `isNice()`
  `void`
  `setDateFormatter(DateFormatter dateFormatter)`
  An instance of `DateFormatter`
  `void`
  `setFormat(String format)`
  `void`
  `setName(String name)`
  `void`
  `setNice(boolean nice)`
  `void`
  `setTimezone(String timezone)`

  ### Methods inherited from class org.apache.struts2.components.ContextBean

  `getVar, putInContext, setVar`

  ### Methods inherited from class org.apache.struts2.components.Component

  `addAllAttributes, addParameter, completeExpression, copyAttributes, determineActionURL, determineNamespace, end, escapeHtmlBody, fieldError, findAncestor, findString, findString, findValue, findValue, findValue, getAttributes, getComponentStack, getNamespace, getPerformClearTagStateForTagPoolingServers, getStack, getStandardAttributes, isAcceptableExpression, isValidTagAttribute, popComponentStack, setActionMapper, setDevMode, setEscapeHtmlBody, setNotExcludedAcceptedPatterns, setPerformClearTagStateForTagPoolingServers, setThrowExceptionsOnELFailure, setUrlHelper, start, stripExpression, toString, usesBody`

  ### Methods inherited from class java.lang.Object

  `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- ## Field Details

  - ### DATETAG_PROPERTY

    public static final String DATETAG_PROPERTY
    Property name to fall back when no format is specified
    See Also:
      - Constant Field Values

  - ### DATETAG_PROPERTY_PAST

    public static final String DATETAG_PROPERTY_PAST
    Property name that defines the past notation (default: {0} ago)
    See Also:
      - Constant Field Values

  - ### DATETAG_PROPERTY_FUTURE

    public static final String DATETAG_PROPERTY_FUTURE
    Property name that defines the future notation (default: in {0})
    See Also:
      - Constant Field Values

  - ### DATETAG_PROPERTY_SECONDS

    public static final String DATETAG_PROPERTY_SECONDS
    Property name that defines the seconds notation (default: in instant)
    See Also:
      - Constant Field Values

  - ### DATETAG_PROPERTY_MINUTES

    public static final String DATETAG_PROPERTY_MINUTES
    Property name that defines the minutes notation (default: {0,choice,1#one minute|1<{0} minutes})
    See Also:
      - Constant Field Values

  - ### DATETAG_PROPERTY_HOURS

    public static final String DATETAG_PROPERTY_HOURS
    Property name that defines the hours notation (default: {0,choice,1#one hour|1<{0} hours}{1,choice,0#|1#, one minute|1>, {1} minutes})
    See Also:
      - Constant Field Values

  - ### DATETAG_PROPERTY_DAYS

    public static final String DATETAG_PROPERTY_DAYS
    Property name that defines the days notation (default: {0,choice,1#one day|1<{0} days}{1,choice,0#|1#, one hour|1<, {1} hours})
    See Also:
      - Constant Field Values

  - ### DATETAG_PROPERTY_YEARS

    public static final String DATETAG_PROPERTY_YEARS
    Property name that defines the years notation (default: {0,choice,1#one year|1<{0} years}{1,choice,0#|1#, one day|1>, {1} days})
    See Also:
      - Constant Field Values

- ## Constructor Details

  - ### Date

    public Date(ValueStack stack)

- ## Method Details

  - ### setDateFormatter

    public void setDateFormatter(DateFormatter dateFormatter)
    An instance of `DateFormatter`

  - ### formatTime

    public String formatTime(TextProvider tp, ZonedDateTime date)
    Calculates the difference in time from now to the given date, and outputs it nicely.
    An example:
    Now = 2006/03/12 13:38:00, date = 2006/03/12 15:50:00 will output "in 1 hour, 12 minutes".
    Parameters:
      `tp` - text provider
      `date` - the date
    Returns:
      the date nicely

  - ### end

    public boolean end(Writer writer, String body)
    Description copied from class: `Component`
    Callback for the end tag of this component. Should the body be evaluated again?
    NOTE: will pop component stack.
    Overrides:
      `end` in class `Component`
    Parameters:
      `writer` - the output writer.
      `body` - the rendered body.
    Returns:
      true if the body should be evaluated again

  - ### setFormat

    public void setFormat(String format)

  - ### setNice

    public void setNice(boolean nice)

  - ### setTimezone

    public void setTimezone(String timezone)

  - ### getName

    public String getName()
    Returns:
      the name.

  - ### setName

    public void setName(String name)

  - ### getFormat

    public String getFormat()
    Returns:
      the format.

  - ### isNice

    public boolean isNice()
    Returns:
      the nice.

  - ### getTimezone

    public String getTimezone()
    Returns:
      the timezone.