<?xml version="1.0" encoding="ISO-8859-1"?>

<document>
 <properties>
  <title>Java date and time API - Quick start guide</title>
  <author>Stephen Colebourne</author>
 </properties>
<body>

<!-- ========================================================================= -->

<section name="Quick start guide">
<p>
This is the quick introduction guide to Joda-Time and the features on offer.
Its designed for those of you who are too impatient to read the full
<a href="userguide.html">user guide</a>.
</p>

<subsection name="Date and Time">
<p>
Joda-Time includes these key datetime classes:
<ul>
<li><a href="apidocs/org/joda/time/DateTime.html"><code>DateTime</code></a> - Immutable replacement for JDK <code>Calendar</code></li>
<li><a href="apidocs/org/joda/time/DateMidnight.html"><code>DateMidnight</code></a> - Immutable class representing a date where the time is forced to midnight</li>
<li><a href="apidocs/org/joda/time/LocalDate.html"><code>LocalDate</code></a> - Immutable class representing a local date without a time (no time zone)</li>
<li><a href="apidocs/org/joda/time/LocalTime.html"><code>LocalTime</code></a> - Immutable class representing a time without a date (no time zone)</li>
<li><a href="apidocs/org/joda/time/LocalDateTime.html"><code>LocalDateTime</code></a> - Immutable class representing a local date and time (no time zone)</li>
</ul>
</p>

<p>
Each datetime class provides a variety of constructors.
These include the <code>Object</code> constructor.
This allows you to construct, for example, <code>DateTime</code> from
the following objects:
<ul>
<li><code>Date</code> - a JDK instant</li>
<li><code>Calendar</code> - a JDK calendar</li>
<li><code>String</code> - in ISO8601 format</li>
<li><code>Long</code> - in milliseconds</li>
<li>any Joda-Time datetime class</li>
</ul>
This list is extensible. In other words Joda-Time sacrifices a little type-safety
for extensibility. It does mean however, that converting from a JDK <code>Date</code>
or <code>Calendar</code> to a Joda-Time class is easy - simply pass the JDK class
into the constructor.
</p>

<p>
Each datetime class provides simple easy methods
to access the datetime <a href="field.html">fields</a>. For example, to access
the month you can use:
<source>
  DateTime dt = new DateTime();
  int month = dt.getMonthOfYear();
</source>
</p>

<p>
All the main datetime classes are immutable (like String) and cannot be changed
after creation. However, simple methods have been provided to alter field values
in a newly created object. For example, to set the year, or add 2 hours you can use:
<source>
  DateTime dt = new DateTime();
  DateTime year2000 = dt.withYear(2000);
  DateTime twoHoursLater = dt.plusHours(2);
</source>
</p>

<p>
In addition to the basic get methods, each datetime class provides property
methods for each field. These provide access to the full wealth of Joda-Time
functionality. For example, to access details about a month or year:
<source>
  DateTime dt = new DateTime();
  String monthName = dt.monthOfYear().getAsText();
  String frenchShortName = dt.monthOfYear().getAsShortText(Locale.FRENCH);
  boolean isLeapYear = dt.year().isLeap();
  DateTime rounded = dt.dayOfMonth().roundFloorCopy();
</source>
</p>
</subsection>

<subsection name="Calendar systems and time zones">
<p>
Joda-Time provides support for multiple calendar systems and the full range
of time zones.
The <a href="apidocs/org/joda/time/Chronology.html"><code>Chronology</code></a>
and <a href="apidocs/org/joda/time/DateTimeZone.html"><code>DateTimeZone</code></a>
classes provide this support.
</p>
<p>
Joda-Time defaults to using the ISO calendar system (the calendar used by most
of the business world) and the default time zone of your machine.
These default values can be overridden whenever necessary.
Please note that the ISO calendar system is historically inaccurate before 1583.
</p>
<p>
Joda-Time uses a pluggable mechanism for calendars. (The JDK uses subclasses
such as <code>GregorianCalendar</code>.)
To obtain a Joda-Time calendar, use one of the factory methods on <code>Chronology</code>.
<source>
  Chronology coptic = CopticChronology.getInstance();
</source>
</p>
<p>
Time zones are implemented as part of the chronology.
To obtain a Joda-Time chronology in the Tokyo time zone, you can use.
<source>
  DateTimeZone zone = DateTimeZone.forID("Asia/Tokyo");
  Chronology gregorianJuian = GJChronology.getInstance(zone);
</source>
</p>
</subsection>

<subsection name="Intervals and time periods">
<p>
Joda-Time provides support for intervals and time periods.
</p>
<p>
An interval is represented by the
<a href="apidocs/org/joda/time/Interval.html"><code>Interval</code></a> class.
It holds a start and end datetime, and allows operations based around that
range of time.
</p>
<p>
A time period is represented by the
<a href="apidocs/org/joda/time/Period.html"><code>Period</code></a> class.
This holds a period such as 6 months, 3 days and 7 hours.
You can create a <code>Period</code> directly, or derive it from an interval.
</p>
<p>
A time duration is represented by the
<a href="apidocs/org/joda/time/Duration.html"><code>Duration</code></a> class.
This holds an exact duration in milliseconds.
You can create a <code>Duration</code> directly, or derive it from an interval.
</p>
<p>
Although a period and a duration may seem similar, they operate differently.
For example, consider adding one day to a <code>DateTime</code> at the daylight
savings cutover.
<source>
  DateTime dt = new DateTime(2005, 3, 26, 12, 0, 0, 0);
  DateTime plusPeriod = dt.plus(Period.days(1));
  DateTime plusDuration = dt.plus(new Duration(24L*60L*60L*1000L));
</source>
Adding a period will add 23 hours in this case, not 24 because of the daylight
savings change, thus the time of the result will still be midday.
Adding a duration will add 24 hours no matter what, thus the time of the result
will change to 13:00.
</p>
</subsection>
</section>
</body>
</document>
