60 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
60 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
61 */ |
61 */ |
62 |
62 |
63 /** |
63 /** |
64 * <p> |
64 * <p> |
65 * Access to date and time using fields and units, additional value type classes and |
65 * Access to date and time using fields and units, and date time adjusters. |
66 * base support for calendar systems other than the default ISO. |
|
67 * </p> |
66 * </p> |
68 * <p> |
67 * <p> |
69 * This package expands on the base package to provide additional functionality for |
68 * This package expands on the base package to provide additional functionality for |
70 * more powerful use cases. Support is included for: |
69 * more powerful use cases. Support is included for: |
71 * </p> |
70 * </p> |
72 * <ul> |
71 * <ul> |
73 * <li>Units of date-time, such as years, months, days and hours</li> |
72 * <li>Units of date-time, such as years, months, days and hours</li> |
74 * <li>Fields of date-time, such as month-of-year, day-of-week or hour-of-day</li> |
73 * <li>Fields of date-time, such as month-of-year, day-of-week or hour-of-day</li> |
75 * <li>Date-time adjustment functions</li> |
74 * <li>Date-time adjustment functions</li> |
76 * <li>Different definitions of weeks</li> |
75 * <li>Different definitions of weeks</li> |
77 * <li>Alternate calendar systems</li> |
|
78 * <li>Additional value types</li> |
|
79 * </ul> |
76 * </ul> |
80 * |
77 * |
81 * <h3>Fields and Units</h3> |
78 * <h3>Fields and Units</h3> |
82 * <p> |
79 * <p> |
83 * Dates and times are expressed in terms of fields and units. |
80 * Dates and times are expressed in terms of fields and units. |
89 * <p> |
86 * <p> |
90 * A field is used to express part of a larger date-time, such as year, month-of-year or second-of-minute. |
87 * A field is used to express part of a larger date-time, such as year, month-of-year or second-of-minute. |
91 * All fields implement {@link java.time.temporal.TemporalField}. |
88 * All fields implement {@link java.time.temporal.TemporalField}. |
92 * The set of well known fields are defined in {@link java.time.temporal.ChronoField}, such as {@code HOUR_OF_DAY}. |
89 * The set of well known fields are defined in {@link java.time.temporal.ChronoField}, such as {@code HOUR_OF_DAY}. |
93 * Additional fields are defined by {@link java.time.temporal.JulianFields}, {@link java.time.temporal.WeekFields} |
90 * Additional fields are defined by {@link java.time.temporal.JulianFields}, {@link java.time.temporal.WeekFields} |
94 * and {@link java.time.temporal.ISOFields}. |
91 * and {@link java.time.temporal.IsoFields}. |
95 * The field interface is designed to allow applications defined fields. |
92 * The field interface is designed to allow applications defined fields. |
96 * </p> |
93 * </p> |
97 * <p> |
94 * <p> |
98 * This package provides tools that allow the units and fields of date and time to be accessed |
95 * This package provides tools that allow the units and fields of date and time to be accessed |
99 * in a general way most suited for frameworks. |
96 * in a general way most suited for frameworks. |
120 * {@link java.time.temporal.Adjusters#next(DayOfWeek)}, such as |
117 * {@link java.time.temporal.Adjusters#next(DayOfWeek)}, such as |
121 * {@code date.with(next(MONDAY))}. |
118 * {@code date.with(next(MONDAY))}. |
122 * Applications can also define adjusters by implementing {@code TemporalAdjuster}. |
119 * Applications can also define adjusters by implementing {@code TemporalAdjuster}. |
123 * </p> |
120 * </p> |
124 * <p> |
121 * <p> |
125 * There are additional interfaces to model addition to and subtraction from a date-time. |
122 * The {@link java.time.temporal.TemporalAmount} interface models amounts of relative time. |
126 * These are {@link java.time.temporal.TemporalAdder} and {@link java.time.temporal.TemporalSubtractor}. |
|
127 * </p> |
123 * </p> |
128 * <p> |
124 * <p> |
129 * In addition to adjusting a date-time, an interface is provided to enable querying - |
125 * In addition to adjusting a date-time, an interface is provided to enable querying - |
130 * {@link java.time.temporal.TemporalQuery}. |
126 * {@link java.time.temporal.TemporalQuery}. |
131 * The most common implementations of the query interface are method references. |
127 * The most common implementations of the query interface are method references. |
142 * The {@link java.time.temporal.WeekFields} class models this distinction. |
138 * The {@link java.time.temporal.WeekFields} class models this distinction. |
143 * </p> |
139 * </p> |
144 * <p> |
140 * <p> |
145 * The ISO calendar system defines an additional week-based division of years. |
141 * The ISO calendar system defines an additional week-based division of years. |
146 * This defines a year based on whole Monday to Monday weeks. |
142 * This defines a year based on whole Monday to Monday weeks. |
147 * This is modeled in {@link java.time.temporal.ISOFields}. |
143 * This is modeled in {@link java.time.temporal.IsoFields}. |
148 * </p> |
144 * </p> |
149 * |
|
150 * <h3>Alternate calendar systems</h3> |
|
151 * <p> |
|
152 * The main API is based around the calendar system defined in ISO-8601. |
|
153 * However, there are other calendar systems, and this package provides basic support for them. |
|
154 * The alternate calendars are provided in the {@code java.time.calendar} package. |
|
155 * </p> |
|
156 * <p> |
|
157 * A calendar system is defined by the {@link java.time.temporal.Chrono} interface, |
|
158 * while a date in a calendar system is defined by the {@link java.time.temporal.ChronoLocalDate} interface. |
|
159 * </p> |
|
160 * <p> |
|
161 * It is intended that applications use the main API whenever possible, including code to read and write |
|
162 * from a persistent data store, such as a database, and to send dates and times across a network. |
|
163 * The "chrono" classes are then used at the user interface level to deal with localized input/output. |
|
164 * </p> |
|
165 * <p> |
|
166 * Using non-ISO calendar systems in an application introduces significant extra complexity. |
|
167 * Ensure that the warnings and recommendations in {@code ChronoLocalDate} have been read before |
|
168 * working with the "chrono" interfaces. |
|
169 * </p> |
|
170 * <p> |
|
171 * This example creates and uses a date in a non-ISO calendar system. |
|
172 * </p> |
|
173 * <pre> |
|
174 * // Print the Thai Buddhist date |
|
175 * ChronoLocalDate<ThaiBuddhistChrono> now1 = ThaiBuddhistChrono.INSTANCE.dateNow(); |
|
176 * int day = now1.get(ChronoField.DAY_OF_MONTH); |
|
177 * int dow = now1.get(ChronoField.DAY_OF_WEEK); |
|
178 * int month = now1.get(ChronoField.MONTH_OF_YEAR); |
|
179 * int year = now1.get(ChronoField.YEAR); |
|
180 * System.out.printf(" Today is %s %s %d-%s-%d%n", now1.getChrono().getId(), |
|
181 * dow, day, month, year); |
|
182 * |
|
183 * // Enumerate the list of available calendars and print today for each |
|
184 * Set<Chrono<?>> chronos = Chrono.getAvailableChronologies(); |
|
185 * for (Chrono<?> chrono : chronos) { |
|
186 * ChronoLocalDate<?> date = chrono.dateNow(); |
|
187 * System.out.printf(" %20s: %s%n", chrono.getId(), date.toString()); |
|
188 * } |
|
189 * |
|
190 * // Print today's date and the last day of the year for the Thai Buddhist Calendar. |
|
191 * ChronoLocalDate<ThaiBuddhistChrono> first = now1 |
|
192 * .with(ChronoField.DAY_OF_MONTH, 1) |
|
193 * .with(ChronoField.MONTH_OF_YEAR, 1); |
|
194 * ChronoLocalDate<ThaiBuddhistChrono> last = first |
|
195 * .plus(1, ChronoUnit.YEARS) |
|
196 * .minus(1, ChronoUnit.DAYS); |
|
197 * System.out.printf(" %s: 1st of year: %s; end of year: %s%n", last.getChrono().getId(), |
|
198 * first, last); |
|
199 * </pre> |
|
200 * |
145 * |
201 * <h3>Package specification</h3> |
146 * <h3>Package specification</h3> |
202 * <p> |
147 * <p> |
203 * Unless otherwise noted, passing a null argument to a constructor or method in any class or interface |
148 * Unless otherwise noted, passing a null argument to a constructor or method in any class or interface |
204 * in this package will cause a {@link java.lang.NullPointerException NullPointerException} to be thrown. |
149 * in this package will cause a {@link java.lang.NullPointerException NullPointerException} to be thrown. |