OASIS Mailing List ArchivesView the OASIS mailing list archive below
or browse/search using MarkMail.


Help: OASIS Mailing Lists Help | MarkMail Help

office-formula message

[Date Prev] | [Thread Prev] | [Thread Next] | [Date Next] -- [Date Index] | [Thread Index] | [List Home]

Subject: Re: [office-formula] Calculation Settings

On Fri, 2009-05-15 at 17:48 -0400, David A. Wheeler wrote:
> Andreas J. Guelzow wrote:
> > On Fri, 2009-05-15 at 18:01 +0000, Eric Patterson wrote:
> > 
> >> - Table:null-date represents a date.  Are conforming applications required to support any possible value for this setting?
> >>
> >> I believe that settings that are most portable and produce the best interoperability to be:
> >>
> >>         table:null-date ="1899-12-30"
> That's probably true as being the MOST portable.  But the hope was to 
> support other options.
> > The more times I read the 1.2 draft the less I understand how this is
> > useful at all. 
> > 
> > How often are users going to use the date "0"? 
> The "null-date" value is the beginning-of-the-epoch value. It's not that 
> they use "date 0", it's that when you see "7000", you know what the 
> starting point is.

You are saying "starting point" but that is not what the draft is
saying. The draft standard describes only a single point not how it
> > There may be an implicit assumption that the number 100 represents a
> > date 100 days after the null-date but
> > (a) I don't see that stated anywhere
> > (b) Not all current spreadsheet programs fulfil this assumption.
> It's there.   It's worded slightly more oddly, because of the many 
> spreadsheet apps that get 1900 leap-years wrong.
> In 3.3 is says: "table:null-date (1899-12-30): Defines the beginning of 
> the epoch; a numeric date of 0 equals this date."

But what does that really mean? You are assuming that "beginning of the
epoch" means that the value corresponding to one day later is 1 larger.
It doesn't seem to say that anywhere.
> > There is some specification relating to this in the openformula draft
> > (4.2.2) but that seems to be restricted to formulas from that name
> > space. Even in the draft, applications are allowed to reproduce the
> > "1900 is calculated as a leap year" situation. Since we don't have a
> > calulation setting reflecting that, table:the null-date only tells us
> > something about the date->number conversion in OpenFormula for the date
> > range from the null-date until 1900/2/28 unless the null date is after
> > 1900/2/28.
> OpenFormula only applies to OpenFormula formulas, of course.  All specs 
> only apply to users of the spec :-).
> Section 4.2.2 says this:
> "Date and DateTime
> A Date is a subtype of number; the number is the number of days from a 
> particular date called the epoch. Thus, a date when presented as a 
> general-purpose number is also called a serial number. This 
> specification does not specify the exact value of the epoch, but 
> implementations shall support all dates from 1904-01-01 through 
> 9999-12-31 (inclusive), with correct calculations. Portable spreadsheet 
> files shall not assume any particular epoch values. Since dates are 
> simply numbers, they can be added, subtracted, and so on like other 
> Numbers. Subtracting one date from another produces the number of days 
> between the dates.
> Implementations of formulas in an OpenDocument file shall use the epoch 
> specified in the  table-null-date attribute of the 
> <table:calculation-setting> element, and shall support at least the 
> following epoch values: 1899-12-30, 1900-01-01, and 1904-01-01."
> So here's how I read the spec: for dates starting at 1904-01-01, you 
> MUST correctly calculate dates from the beginning of the epoch (0).   It 
> doesn't _require_ that dates be calculated correctly BEFORE that date, 
> but it DOES permit it.  E.G., Excel doesn't handle 1900 incorrectly, and 
> need not change to implement the spec.  OpenOffice does 1900 correctly, 
> and it doesn't need to change either.  Mac spreadsheets that use 
> 1904-01-01 as the epoch can have trouble with ANY date before then. 
> This means that dates before 1904-01-01 (esp. in year 1900) are not 
> necessarily exchangeable per the spec, but this _IS_ actually the 
> current situation.  The important point is that we don't REQUIRE 
> applications to do it wrong.
> I agree with Eric Patterson, as I noted above... "1899-12-30" is the 
> most likely value for null-date.  Which is why it's the default.

Am I the only one you sees at least one contradiction in all of this:

Part 1 says: 
The <table:null-date> element specifies the null date for a spreadsheet
document. The null date is the date that results in the value “0” if a
date value is converted into a numeric value.

part 2 4.2.2 says: Portable documents should use the epoch date
1899-12-30 to compensate for serial numbers originating from
applications that include a 1900-02-29 leap day in their calculations.

In the context of 4.2.2 this seems to say that 1899-12-30 is not the
true null-date since we are "compensating" to have matching values after

If you want to be able to match serial numbers after 1900-3-1 and you
don't have a flag that indicates whether you have a serial number skip
between 1900-2-28 and 1900-3-1, then you can't fix the serial number at
a date prior to 1900-3-1.

I think what one really should want is a specification of the serial
number matching 1904-1-1 and a statement how days and changes in serial
numbers are related.


Andreas J. Guelzow, PhD, FTICA
Coordinator, Mathematical & Computing Sciences
Concordia University College of Alberta

[Date Prev] | [Thread Prev] | [Thread Next] | [Date Next] -- [Date Index] | [Thread Index] | [List Home]