Questions On Proposed ANSI Standard DateAndTime

R. A. Harmon harmonra at
Sat Jul 4 15:50:35 UTC 1998

Hi Squeakers:

I'm trying to implement the <DateAndTime> protocol messages, but can't get a
feel for what their definitions mean in terms concrete enough to implement.
I posted a question about this on the comp.lang.smalltalk news group, but
didn't get a response.  I hope someone in the Squeak community might be able
to help.  I think I could figure out how <DateAndTime> works if I could just
see what the various messages do with examples of real dates and times.  Any
help would be greatly appreciated.

I'll use a short-hand notation of the class name with example values in parens.
        DateAndTime(yy/mm/dd, hh:mm:ss, d:hh:mm:ss)
                      date      time      offset

As I understand it, a date and time in UTC means the date and time in GMT.
So a DateAndTime class>>#year:month:day:hour:minute:second: message
given the values for 8:00 am in California on April 26, 1997 return an instance
DateAndTime(97/04/26, 02:00:00, 0:06:00:00).

What does DateAndTime return from the following:

        DateAndTime(97/04/26, 02:00:00, 0:06:00:00) + Duration(0:00:00:11)
        ???-> DateAndTime(97/04/26, 02:00:11, 0:06:00:00)

        DateAndTime(97/04/26, 02:00:00, 0:06:00:00) + Duration(-0:00:00:11)
        ???-> DateAndTime(97/04/26, 01:59:49, 0:06:00:00)

I think the implementation of DateAndTime>>#< should be as follows:

< operand
    self offset = operand offset ifTrue: [
        self theDate < operand theDate ifFalse: [
            ^true       "receiver #year, #month, & #day
                        < operand #year, #month, & #day."
        (self theDate = operand theDate)
        & (self theTime < operand theTime)
        ifTrue: [
            ^true       "receiver #hour24, #minute, #second
                        < operand #hour24, #minute, #second."
    ^self asUTC < operand asUTC

Is the following result correct in that any of the operands are
negative, it reduces the duration as the -1 in the second example
reduces the one minute duration to 59 seconds?

        Duration days: 0 hours: 0  minutes: 1 seconds: 1
        ???-> Duration(0:00:01:01)

        Duration days: 0 hours: 0 minutes: 1 seconds: -1
        ???-> Duration(0:00:00:59)

Is the following result of the Duration>>#* message correct?

        (Duration days: 1 hours: 0 minutes: 0 seconds: 1) * 9
        ???-> Duration(9:00:00:09)

Is the following result of the Duration>>#asLocal message correct?

        DateAndTime(97/04/26, 02:00:00, 0:06:00:00) asLocal
        ???-> DateAndTime(97/04/26, 08:00:00, 0:00:00:00)

Is the following result of the Duration>>#asUTC message correct?

        DateAndTime(97/04/26, 02:00:00, 0:06:00:00) asUTC
        ???-> DateAndTime(97/04/26, 02:00:00, 0:06:00:00)

        DateAndTime(97/04/26, 08:00:00, 0:00:00:00) asUTC
        ???-> DateAndTime(97/04/26, 02:00:00, 0:06:00:00)

Should the Duration>>#< message given an operand other than an instance of
class Duration generate an error or return false?

Is the correct global name DateAndTime or DateTime?

I haven't this much trouble understanding a concept since trying to
understand "present value of future dollars".  Or was it "future value of
present dollars"?  Or maybe it was "dollar value of future presents"?

Richard A. Harmon          "The only good zombie is a dead zombie"
harmonra at           E. G. McCarthy

More information about the Squeak-dev mailing list