I would only add that I think the DateTime constructor should accept a Date object:
my $bday = new Date.new(1968, 5, 5); my $specifically = DateTime.new(:date($bday), :hour(20), :minute(47)); or at least, Date should have a method that returns it's value as pairs suitable for passing to DateTime.new. On Friday, April 16, 2010, <pugs-comm...@feather.perl6.nl> wrote: > 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 > > -- Mark J. Reed <markjr...@gmail.com>