Package javax.mail.internet

## Class MailDateFormat

- java.lang.Object
- - java.text.Format
  - - java.text.DateFormat
    - - java.text.SimpleDateFormat
      - - javax.mail.internet.MailDateFormat

All Implemented Interfaces:
  `java.io.Serializable`, `java.lang.Cloneable`

    public class MailDateFormat
    extends java.text.SimpleDateFormat

Formats and parses date specification based on RFC 2822.

This class does not support methods that influence the format. It always formats the date based on the specification below.

3.3. Date and Time Specification

Date and time occur in several header fields. This section specifies the syntax for a full date and time specification. Though folding white space is permitted throughout the date-time specification, it is RECOMMENDED that a single space be used in each place that FWS appears (whether it is required or optional); some older implementations may not interpret other occurrences of folding white space correctly.

     date-time       =       [ day-of-week "," ] date FWS time [CFWS]

     day-of-week     =       ([FWS] day-name) / obs-day-of-week

     day-name        =       "Mon" / "Tue" / "Wed" / "Thu" /
                             "Fri" / "Sat" / "Sun"

     date            =       day month year

     year            =       4*DIGIT / obs-year

     month           =       (FWS month-name FWS) / obs-month

     month-name      =       "Jan" / "Feb" / "Mar" / "Apr" /
                             "May" / "Jun" / "Jul" / "Aug" /
                             "Sep" / "Oct" / "Nov" / "Dec"

     day             =       ([FWS] 1*2DIGIT) / obs-day

     time            =       time-of-day FWS zone

     time-of-day     =       hour ":" minute [ ":" second ]

     hour            =       2DIGIT / obs-hour

     minute          =       2DIGIT / obs-minute

     second          =       2DIGIT / obs-second

     zone            =       (( "+" / "-" ) 4DIGIT) / obs-zone

The day is the numeric day of the month. The year is any numeric year 1900 or later.

The time-of-day specifies the number of hours, minutes, and optionally seconds since midnight of the date indicated.

The date and time-of-day SHOULD express local time.

The zone specifies the offset from Coordinated Universal Time (UTC, formerly referred to as "Greenwich Mean Time") that the date and time-of-day represent. The "+" or "-" indicates whether the time-of-day is ahead of (i.e., east of) or behind (i.e., west of) Universal Time. The first two digits indicate the number of hours difference from Universal Time, and the last two digits indicate the number of minutes difference from Universal Time. (Hence, +hhmm means +(hh * 60 + mm) minutes, and -hhmm means -(hh * 60 + mm) minutes). The form "+0000" SHOULD be used to indicate a time zone at Universal Time. Though "-0000" also indicates Universal Time, it is used to indicate that the time was generated on a system that may be in a local time zone other than Universal Time and therefore indicates that the date-time contains no information about the local time zone.

A date-time specification MUST be semantically valid. That is, the day-of-the-week (if included) MUST be the day implied by the date, the numeric day-of-month MUST be between 1 and the number of days allowed for the specified month (in the specified year), the time-of-day MUST be in the range 00:00:00 through 23:59:60 (the number of seconds allowing for a leap second; see [STD12]), and the zone MUST be within the range -9959 through +9959.

### Synchronization

Date formats are not synchronized. It is recommended to create separate format instances for each thread. If multiple threads access a format concurrently, it must be synchronized externally.

Since:
  JavaMail 1.2
Author:
  Anthony Vanelverdinghe, Max Spivak
See Also:
  Serialized Form

### Nested Class Summary

### Nested classes/interfaces inherited from class java.text.DateFormat

`java.text.DateFormat.Field`

### Field Summary

### 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
`MailDateFormat()` Create a new date format for the RFC2822 specification with lenient parsing.

### Method Summary

All Methods Instance Methods Concrete Methods
`void` `applyLocalizedPattern​(java.lang.String pattern)` This method always throws an UnsupportedOperationException and should not be used because RFC 2822 mandates a specific pattern.
`void` `applyPattern​(java.lang.String pattern)` This method always throws an UnsupportedOperationException and should not be used because RFC 2822 mandates a specific pattern.
`MailDateFormat` `clone()` Overrides Cloneable.
`java.lang.StringBuffer` `format​(java.util.Date date, java.lang.StringBuffer dateStrBuf, java.text.FieldPosition fieldPosition)` Formats the given date in the format specified by RFC 2822 in the current TimeZone.
`java.util.Date` `get2DigitYearStart()` This method always throws an UnsupportedOperationException and should not be used because RFC 2822 mandates another strategy for interpreting 2-digits years.
`java.util.Date` `parse​(java.lang.String text, java.text.ParsePosition pos)` Parses the given date in the format specified by RFC 2822.
`void` `set2DigitYearStart​(java.util.Date startDate)` This method always throws an UnsupportedOperationException and should not be used because RFC 2822 mandates another strategy for interpreting 2-digits years.
`void` `setCalendar​(java.util.Calendar newCalendar)` This method always throws an UnsupportedOperationException and should not be used because RFC 2822 mandates a specific calendar.
`void` `setDateFormatSymbols​(java.text.DateFormatSymbols newFormatSymbols)` This method always throws an UnsupportedOperationException and should not be used because RFC 2822 mandates specific date format symbols.
`void` `setNumberFormat​(java.text.NumberFormat newNumberFormat)` This method always throws an UnsupportedOperationException and should not be used because RFC 2822 mandates a specific number format.

### Methods inherited from class java.text.SimpleDateFormat

`equals, formatToCharacterIterator, getDateFormatSymbols, hashCode, toLocalizedPattern, toPattern`

### Methods inherited from class java.text.DateFormat

`format, format, getAvailableLocales, getCalendar, getDateInstance, getDateInstance, getDateInstance, getDateTimeInstance, getDateTimeInstance, getDateTimeInstance, getInstance, getNumberFormat, getTimeInstance, getTimeInstance, getTimeInstance, getTimeZone, isLenient, parse, parseObject, setLenient, setTimeZone`

### Methods inherited from class java.text.Format

`format, parseObject`

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

`finalize, getClass, notify, notifyAll, toString, wait, wait, wait`

### Constructor Detail

#### MailDateFormat

    public MailDateFormat()

Create a new date format for the RFC2822 specification with lenient parsing.

### Method Detail

#### clone

    public MailDateFormat clone()

Overrides Cloneable.

Overrides:
  `clone` in class `java.text.SimpleDateFormat`
Returns:
  a clone of this instance
Since:
  JavaMail 1.6

#### format

    public java.lang.StringBuffer format​(java.util.Date date,
                                         java.lang.StringBuffer dateStrBuf,
                                         java.text.FieldPosition fieldPosition)

Formats the given date in the format specified by RFC 2822 in the current TimeZone.

Overrides:
  `format` in class `java.text.SimpleDateFormat`
Parameters:
  `date` - the Date object
  `dateStrBuf` - the formatted string
  `fieldPosition` - the current field position
Returns:
  StringBuffer the formatted String
Since:
  JavaMail 1.2

#### parse

    public java.util.Date parse​(java.lang.String text,
                                java.text.ParsePosition pos)

Parses the given date in the format specified by RFC 2822.

- With strict parsing, obs-* tokens are unsupported. Lenient parsing supports obs-year and obs-zone, with the exception of the 1-character military time zones.
- The optional CFWS token at the end is not parsed.
- RFC 2822 specifies that a zone of "-0000" indicates that the date-time contains no information about the local time zone. This class uses the UTC time zone in this case.

Overrides:
  `parse` in class `java.text.SimpleDateFormat`
Parameters:
  `text` - the formatted date to be parsed
  `pos` - the current parse position
Returns:
  Date the parsed date. In case of error, returns null.
Since:
  JavaMail 1.2

#### setCalendar

    public void setCalendar​(java.util.Calendar newCalendar)

This method always throws an UnsupportedOperationException and should not be used because RFC 2822 mandates a specific calendar.

Overrides:
  `setCalendar` in class `java.text.DateFormat`
Throws:
  `java.lang.UnsupportedOperationException` - if this method is invoked

#### setNumberFormat

    public void setNumberFormat​(java.text.NumberFormat newNumberFormat)

This method always throws an UnsupportedOperationException and should not be used because RFC 2822 mandates a specific number format.

Overrides:
  `setNumberFormat` in class `java.text.DateFormat`
Throws:
  `java.lang.UnsupportedOperationException` - if this method is invoked

#### applyLocalizedPattern

    public void applyLocalizedPattern​(java.lang.String pattern)

This method always throws an UnsupportedOperationException and should not be used because RFC 2822 mandates a specific pattern.

Overrides:
  `applyLocalizedPattern` in class `java.text.SimpleDateFormat`
Throws:
  `java.lang.UnsupportedOperationException` - if this method is invoked
Since:
  JavaMail 1.6

#### applyPattern

    public void applyPattern​(java.lang.String pattern)

This method always throws an UnsupportedOperationException and should not be used because RFC 2822 mandates a specific pattern.

Overrides:
  `applyPattern` in class `java.text.SimpleDateFormat`
Throws:
  `java.lang.UnsupportedOperationException` - if this method is invoked
Since:
  JavaMail 1.6

#### get2DigitYearStart

    public java.util.Date get2DigitYearStart()

This method always throws an UnsupportedOperationException and should not be used because RFC 2822 mandates another strategy for interpreting 2-digits years.

Overrides:
  `get2DigitYearStart` in class `java.text.SimpleDateFormat`
Returns:
  the start of the 100-year period into which two digit years are parsed
Throws:
  `java.lang.UnsupportedOperationException` - if this method is invoked
Since:
  JavaMail 1.6

#### set2DigitYearStart

    public void set2DigitYearStart​(java.util.Date startDate)

This method always throws an UnsupportedOperationException and should not be used because RFC 2822 mandates another strategy for interpreting 2-digits years.

Overrides:
  `set2DigitYearStart` in class `java.text.SimpleDateFormat`
Throws:
  `java.lang.UnsupportedOperationException` - if this method is invoked
Since:
  JavaMail 1.6

#### setDateFormatSymbols

    public void setDateFormatSymbols​(java.text.DateFormatSymbols newFormatSymbols)

This method always throws an UnsupportedOperationException and should not be used because RFC 2822 mandates specific date format symbols.

Overrides:
  `setDateFormatSymbols` in class `java.text.SimpleDateFormat`
Throws:
  `java.lang.UnsupportedOperationException` - if this method is invoked
Since:
  JavaMail 1.6