1Date::ISO8601(3)      User Contributed Perl Documentation     Date::ISO8601(3)
2
3
4

NAME

6       Date::ISO8601 - the three ISO 8601 numerical calendars
7

SYNOPSIS

9               use Date::ISO8601 qw(present_y);
10
11               print present_y($y);
12
13               use Date::ISO8601
14                       qw(month_days cjdn_to_ymd ymd_to_cjdn present_ymd);
15
16               $md = month_days(2000, 2);
17               ($y, $m, $d) = cjdn_to_ymd(2406029);
18               $cjdn = ymd_to_cjdn(1875, 5, 20);
19               print present_ymd(2406029);
20               print present_ymd(1875, 5, 20);
21
22               use Date::ISO8601
23                       qw(year_days cjdn_to_yd yd_to_cjdn present_yd);
24
25               $yd = year_days(2000);
26               ($y, $d) = cjdn_to_yd(2406029);
27               $cjdn = yd_to_cjdn(1875, 140);
28               print present_yd(2406029);
29               print present_yd(1875, 140);
30
31               use Date::ISO8601
32                       qw(year_weeks cjdn_to_ywd ywd_to_cjdn present_ywd);
33
34               $yw = year_weeks(2000);
35               ($y, $w, $d) = cjdn_to_ywd(2406029);
36               $cjdn = ywd_to_cjdn(1875, 20, 4);
37               print present_ywd(2406029);
38               print present_ywd(1875, 20, 4);
39

DESCRIPTION

41       The international standard ISO 8601 "Data elements and interchange
42       formats - Information interchange - Representation of dates and times"
43       defines three distinct calendars by which days can be labelled.  It
44       also defines textual formats for the representation of dates in these
45       calendars.  This module provides functions to convert dates between
46       these three calendars and Chronological Julian Day Numbers, which is a
47       suitable format to do arithmetic with.  It also supplies functions that
48       describe the shape of these calendars, to assist in calendrical
49       calculations.  It also supplies functions to represent dates textually
50       in the ISO 8601 formats.  ISO 8601 also covers time of day and time
51       periods, but this module does nothing relating to those parts of the
52       standard; this is only about labelling days.
53
54       The first ISO 8601 calendar divides time up into years, months, and
55       days.  It corresponds exactly to the Gregorian calendar, invented by
56       Aloysius Lilius and promulgated by Pope Gregory XIII in the late
57       sixteenth century, with AD (CE) year numbering.  This calendar is
58       applied to all time, not just to dates after its invention nor just to
59       years 1 and later.  Thus for ancient dates it is the proleptic
60       Gregorian calendar with astronomical year numbering.
61
62       The second ISO 8601 calendar divides time up into the same years as the
63       first, but divides the year directly into days, with no months.  The
64       standard calls this "ordinal dates".  Ordinal dates are commonly
65       referred to as "Julian dates", a mistake apparently deriving from true
66       Julian Day Numbers, which divide time up solely into linearly counted
67       days.
68
69       The third ISO 8601 calendar divides time up into years, weeks, and
70       days.  The years approximate the years of the first two calendars, so
71       they stay in step in the long term, but the boundaries differ.  This
72       week-based calendar is sometimes called "the ISO calendar", apparently
73       in the belief that ISO 8601 does not define any other.  It is also
74       referred to as "business dates", because it is most used by certain
75       businesses to whom the week is the most important temporal cycle.
76
77       The Chronological Julian Day Number is an integral number labelling
78       each day, where the day extends from midnight to midnight in whatever
79       time zone is of interest.  It is a linear count of days, where each
80       day's number is one greater than the previous day's number.  It is
81       directly related to the Julian Date system: in the time zone of the
82       prime meridian, the CJDN equals the JD at noon.  By way of epoch, the
83       day on which the Convention of the Metre was signed, which ISO 8601
84       defines to be 1875-05-20 (and 1875-140 and 1875-W20-4), is CJDN
85       2406029.
86
87       This module places no limit on the range of dates to which it may be
88       applied.  All function arguments are permitted to be "Math::BigInt" or
89       "Math::BigRat" objects in order to achieve arbitrary range.  Native
90       Perl integers are also permitted, as a convenience when the range of
91       dates being handled is known to be sufficiently small.
92

FUNCTIONS

94       Numbers in this API may be native Perl integers, "Math::BigInt"
95       objects, or integer-valued "Math::BigRat" objects.  All three types are
96       acceptable for all parameters, in any combination.  In all conversion
97       functions, the most-significant part of the result (which is the only
98       part with unlimited range) is of the same type as the most-significant
99       part of the input.  Less-significant parts of results (which have a
100       small range) are consistently native Perl integers.
101
102       All functions "die" if given invalid parameters.
103
104   Years
105       present_y(YEAR)
106           Puts the given year number into ISO 8601 textual presentation
107           format.  For years [0, 9999] this is simply four digits.  For years
108           outside that range it is a sign followed by at least four digits.
109
110           This is the minimum-length presentation format.  If it is desired
111           to use a form that is longer than necessary, such as to use at
112           least five digits for all year numbers (as the Long Now Foundation
113           does), then the right tool is "sprintf" (see "sprintf" in
114           perlfunc).
115
116           This format is unconditionally conformant to all versions of ISO
117           8601 for years [1583, 9999].  For years [0, 1582], preceding the
118           historical introduction of the Gregorian calendar, it is conformant
119           only where it is mutually agreed that such dates (represented in
120           the proleptic Gregorian calendar) are acceptable.  For years
121           outside the range [0, 9999], where the expanded format must be
122           used, the result is only conformant to ISO 8601:2004 (earlier
123           versions lacked these formats), and only where it is mutually
124           agreed to use this format.
125
126   Gregorian calendar
127       Each year is divided into twelve months, numbered [1, 12]; month number
128       1 is January.  Each month is divided into days, numbered sequentially
129       from 1.  The month lengths are irregular.  The year numbers have
130       unlimited range.
131
132       month_days(YEAR, MONTH)
133           The parameters identify a month, and the function returns the
134           number of days in that month as a native Perl integer.
135
136       cjdn_to_ymd(CJDN)
137           This function takes a Chronological Julian Day Number and returns a
138           list of a year, month, and day.
139
140       ymd_to_cjdn(YEAR, MONTH, DAY)
141           This performs the reverse of the translation that "cjdn_to_ymd"
142           does.  It takes year, month, and day numbers, and returns the
143           corresponding CJDN.
144
145       present_ymd(CJDN)
146       present_ymd(YEAR, MONTH, DAY)
147           Puts the given date into ISO 8601 Gregorian textual presentation
148           format.  The `extended' format (with "-" separators) is used.  The
149           conformance notes for "present_y" apply to this function also.
150
151           If the date is given as a (YEAR, MONTH, DAY) triplet then these are
152           not checked for consistency.  The MONTH and DAY values are only
153           checked to ensure that they fit into the fixed number of digits.
154           This allows the use of this function on data other than actual
155           Gregorian dates.
156
157   Ordinal dates
158       Each year is divided into days, numbered sequentially from 1.  The year
159       lengths are irregular.  The years correspond exactly to those of the
160       Gregorian calendar.
161
162       year_days(YEAR)
163           The parameter identifies a year, and the function returns the
164           number of days in that year as a native Perl integer.
165
166       cjdn_to_yd(CJDN)
167           This function takes a Chronological Julian Day Number and returns a
168           list of a year and ordinal day.
169
170       yd_to_cjdn(YEAR, DAY)
171           This performs the reverse of the translation that "cjdn_to_yd"
172           does.  It takes year and ordinal day numbers, and returns the
173           corresponding CJDN.
174
175       present_yd(CJDN)
176       present_yd(YEAR, DAY)
177           Puts the given date into ISO 8601 ordinal textual presentation
178           format.  The `extended' format (with "-" separators) is used.  The
179           conformance notes for "present_y" apply to this function also.
180
181           If the date is given as a (YEAR, DAY) pair then these are not
182           checked for consistency.  The DAY value is only checked to ensure
183           that it fits into the fixed number of digits.  This allows the use
184           of this function on data other than actual ordinal dates.
185
186   Week-based calendar
187       Each year is divided into weeks, numbered sequentially from 1.  Each
188       week is divided into seven days, numbered [1, 7]; day number 1 is
189       Monday.  The year lengths are irregular.  The year numbers have
190       unlimited range.
191
192       The years correspond to those of the Gregorian calendar.  Each week is
193       associated with the Gregorian year that contains its Thursday and hence
194       contains the majority of its days.
195
196       year_weeks(YEAR)
197           The parameter identifies a year, and the function returns the
198           number of weeks in that year as a native Perl integer.
199
200       cjdn_to_ywd(CJDN)
201           This function takes a Chronological Julian Day Number and returns a
202           list of a year, week, and day.
203
204       ywd_to_cjdn(YEAR, WEEK, DAY)
205           This performs the reverse of the translation that "cjdn_to_ywd"
206           does.  It takes year, week, and day numbers, and returns the
207           corresponding CJDN.
208
209       present_ywd(CJDN)
210       present_ywd(YEAR, WEEK, DAY)
211           Puts the given date into ISO 8601 week-based textual presentation
212           format.  The `extended' format (with "-" separators) is used.  The
213           conformance notes for "present_y" apply to this function also.
214
215           If the date is given as a (YEAR, WEEK, DAY) triplet then these are
216           not checked for consistency.  The WEEK and DAY values are only
217           checked to ensure that they fit into the fixed number of digits.
218           This allows the use of this function on data other than actual
219           week-based dates.
220

SEE ALSO

222       Date::JD, DateTime
223

AUTHOR

225       Andrew Main (Zefram) <zefram@fysh.org>
226
228       Copyright (C) 2006, 2007, 2009, 2011 Andrew Main (Zefram)
229       <zefram@fysh.org>
230

LICENSE

232       This module is free software; you can redistribute it and/or modify it
233       under the same terms as Perl itself.
234
235
236
237perl v5.12.3                      2011-08-16                  Date::ISO8601(3)
Impressum