> From: Alistair Grant <
[hidden email]>
> I think that there's still use for representing a date as a timespan,
> i.e. a 24 hour period that we can use to find the intersection of
> times, etc (in addition to adding a timezone offset to a DateTime to
> figure out the date in a different country). Whether it needs to be a
> separate class from Timespan I'm not so sure.
From my Smalltalk library:
Date
methods:
asMidnightDateAndTime
^DateAndTime year: self year month: self month day: self dayOfMonth
hour: 0 minute: 0 second: 0
pvtSpanFrom: start to: end
^Timespan starting: start asMidnightDateAndTime
ending: end asMidnightDateAndTime
daySpan
^self pvtSpanFrom: self to: self next
monthSpan
^self pvtSpanFrom: self thisMonth to: self nextMonth
quarterSpan
^self pvtSpanFrom: self thisQuarter to: self nextQuarter
yearSpan
^self pvtSpanFrom: self thisYear to: self nextYear
One of the tricky things here is that the result of #daySpan
may be 23, 24, or 25 hours, plus or minus a second depending
where the leap seconds fall. It is *usually* a 24-hour
period, but definitely not always.
And of course you can't go *back* from a #daySpan to a Date
without reference to a particular time zone (not zone offset,
because of course the zone offset can change during a "day").