Author: moritz
Date: 2010-04-16 22:40:37 +0200 (Fri, 16 Apr 2010)
New Revision: 30398

Modified:
   docs/Perl6/Spec/S32-setting-library/Temporal.pod
Log:
[S32/Temporal] spec Date type

This is heavily inspired by Date::Simple on CPAN, and mostly implemented
at http://github.com/moritz/Date/ as an external module, that currently works
fine with Rakudo (but is really compiler agnostic).

Modified: docs/Perl6/Spec/S32-setting-library/Temporal.pod
===================================================================
--- docs/Perl6/Spec/S32-setting-library/Temporal.pod    2010-04-16 15:47:23 UTC 
(rev 30397)
+++ docs/Perl6/Spec/S32-setting-library/Temporal.pod    2010-04-16 20:40:37 UTC 
(rev 30398)
@@ -8,6 +8,7 @@
 
     Carl Mäsak <cma...@gmail.com>
     Martin Berends <mbere...@autoexec.demon.nl>
+    Moritz Lenz <mor...@faui2k3.org>
     (and others named in FOOTNOTE at bottom)
 
 =head1 VERSION
@@ -74,6 +75,11 @@
 This has the same effect as doing C<DateTime.now().truncate('day')>; see
 '"Set" methods' below.
 
+Or if you want to extract the date as a C<Date> object (see below),
+you can use simple type coercion:
+
+    my $today = $datetime.Date;
+
 General dates can be specified through the C<new> constructor:
 
     my $moonlanding = DateTime.new( :year(1969), :month(7), :day(16),
@@ -195,6 +201,62 @@
 Monday of the week in which it occurs, and the time components are all
 set to 0.
 
+=head1 Date
+
+C<Date> objects represent a day without a time component, and allow easier
+manipulation by assuming that integers always mean days.
+
+Days, Months and days of week are 1-based.
+
+=head2 Constructors
+
+    Date.today();               # today's date
+    Date.new('2010-12-24');     # YYYY-MM-DD format
+    Date.new(:year(2010), :month(12), :day(24));
+    Date.new(2010, 12, 24);
+
+The constructors die with a helpful error message if month or day are out of
+range.
+
+=head2 Accessors
+
+The following accessors are pretty obvious, and are defined by example only.
+See the test suite for more formal definitions.
+
+    my $d = Date.new('2010-12-24');
+    $d.year             # 2010
+    $d.month            # 12
+    $d.day              # 24
+    $d.day-of-week      # 5     # Friday
+    $d.is-leap-year     # Bool::False
+    $d.days-in-month    # 31
+    $d.Str              # '2010-12-24'
+
+=head2 Arithmetics
+
+    $d.succ                     # Date.new('2010-12-25')
+    $d.pred                     # Date.new('2010-12-23')
+    $d - Date.new('1984-03-02') # 9793      # (difference in days)
+    $d - 42                     # Date.new('2010-11-12')
+    $d + 3                      # Date.new('2010-12-27')
+    3  + $d                     # Date.new('2010-12-27')
+
+=head2 Semi-internal methods
+
+[This section is severely conjectural]
+
+For efficient implementation of arithmetics on C<Date> objects, two more
+methods are exposed:
+
+    $d.daycount
+    Date.new-from-daycount(Int $daycount)
+
+The C<daycount> method returns the difference of number of days between the
+current object and an arbitrary start of epoch. This epoch is arbitrary and
+implementation dependent, and is even allowed to change between invocations of
+the same program. The C<new-from-daycount> constructor creates a new C<Date>
+object with a given daycount.
+
 =head1 Additions
 
 Please post errors and feedback to C<perl6-language>. If you are making

Reply via email to