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

<document>

 <properties>
  <title>Java date and time API - Chronology</title>
  <author>Stephen Colebourne</author>
 </properties>

 <body>

<section name="Chronology">

<p>
A <i>chronology</i> in Joda-Time is a pluggable calendar system.
The JDK supports multiple calendar systems via subclasses of <code>Calendar</code>.
This is clunky, and in practice it is very difficult to write another calendar system.
Joda-Time supports multiple calendar systems by designing a pluggable system.
</p>
<p>
The default chronology in Joda-Time is <a href="cal_iso.html">ISO</a>.
This calendar system is the same as that used by business in the majority of the world today.
The ISO system is unsuitable for historical work before 1583 as it applies the leap year rules
from today back in time (it is a proleptic calendar).
As a result, users requiring a more historically accurate calendar system are forced to
think about their actual requirements, which we believe is a Good Thing.
</p>
<p>
The actual calculations of the chronology are split between the
<a href="apidocs/org/joda/time/Chronology.html">Chronology</a> class itself
and the field classes -
<a href="apidocs/org/joda/time/DateTimeField.html">DateTimeField</a> and
<a href="apidocs/org/joda/time/DurationField.html">DurationField</a>.
Together, the subclasses of these three classes form the bulk of the code in the library.
However, most users will never need to use or refer directly to the subclasses.
Instead, most applications will simply obtain the chronology and use it as a singleton.
</p>
<p>
The chronology class also supports the time zone functionality.
This is applied to the underlying chronology via the decorator design pattern.
The <a href="apidocs/org/joda/time/DateTimeZone.html">DateTimeZone</a> class provides
access to the zones via factories, and also supports a default zone concept.
A full list of time zones can be found <a href="timezones.html">here</a>.
It is also possible to <a href="tz_update.html">update the zone data</a> yourself.
</p>
<p>
Internally, all the chronology, field and time zone classes are maintained as singletons.
Thus there is an initial setup cost when using Joda-Time, but after that only
the main API instance classes (DateTime, Interval, Period, etc.) have creation and
garbage collector costs.
</p>

</section>

<section name="Using Chronology in Joda-Time">
<p>
A Chronology is obtained and used in Joda-Time as a singleton:
<source>
DateTimeZone zone = DateTimeZone.forID("Europe/London");
Chronology coptic = CopticChronology.getInstance(zone);

// current time with coptic chronology
DateTime dt = new DateTime(coptic);

int year = dt.getYear();   // gets the current coptic year
int month = dt.getMonthOfYear(); // gets the current coptic month
</source>
</p>

<subsection name="Nulls">
<p>
A null chronology always refers to ISO chronology in the default zone.
Thus, when a method is defined as taking a <code>Chronology</code>, passing null in
will be the same as passing in the ISO chronology in the default time zone.
</p>
</subsection>

</section>

</body>
</document>
