jdk/src/share/classes/java/time/temporal/package-info.java
changeset 15658 55b829ca2334
parent 15289 3ac550392e43
child 16852 60207b2b4b42
equal deleted inserted replaced
15657:c588664d547e 15658:55b829ca2334
    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&lt;ThaiBuddhistChrono&gt; 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&lt;Chrono&lt;?&gt;&gt; chronos = Chrono.getAvailableChronologies();
       
   185  *       for (Chrono&lt;?&gt; chrono : chronos) {
       
   186  *         ChronoLocalDate&lt;?&gt; 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&lt;ThaiBuddhistChrono&gt; first = now1
       
   192  *                 .with(ChronoField.DAY_OF_MONTH, 1)
       
   193  *                 .with(ChronoField.MONTH_OF_YEAR, 1);
       
   194  *       ChronoLocalDate&lt;ThaiBuddhistChrono&gt; 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.