xsl-list
[Top] [All Lists]

Re: [xsl] Re: format-date() and negative (BCE) dates

2014-05-07 01:48:07
There is one scale of time that is free of all issues with the
counting of years around zero and local interpretations: Julian Day
Number. It is very convenient for calculating intervals of all
granularity. (You may not need Julian Day.)

-W


On 07/05/2014, Martin Holmes gtxxgm-xsl-list-2(_at_)m(_dot_)gmane(_dot_)org
<xsl-list-service(_at_)lists(_dot_)mulberrytech(_dot_)com> wrote:
On 14-05-06 04:16 PM, Michael Kay mike(_at_)saxonica(_dot_)com wrote:

On 6 May 2014, at 23:53, Martin Holmes 
gtxxgm-xsl-list-2(_at_)m(_dot_)gmane(_dot_)org
<xsl-list-service(_at_)lists(_dot_)mulberrytech(_dot_)com> wrote:

Consider this BCE date:

-0001-12-29

This date is in fact ambiguous. In ISO 8601, and in XSD 1.1, this is
the date two years before 0001-12-29. In XSD 1.0, it is the date one
year before 0001-12-29.

You're right. In my encoding, in fact, it's a Julian date. I'm not sure
how to say that when passing it to the xs:date constructor. To
complicate matters further, one of the things I'm trying to do is
conversion between Julian and Gregorian, and it helps to do date
arithmetic with the date functions, so I usually construct a date with
xs:date from the Julian (which is slightly evil but still) then do the
arithmetic to get a Gregorian date-range which is roughly equivalent.
Most of my dates are not BCE, of course, so this oddity took me by
surprise.

XPath 2.0 refers to XSD 1.0. XPath 3.0 allows the implementation to
use either XSD 1.0 or XSD 1.1.

If I format this using the "AD" (Gregorian) calendar, like this:

format-date(xs:date('-0001-12-29'), '[Y0001]-[M01]-[D01]', (),
'AD', ())

I get an invalid date:

0000-12-29

There is no year zero in the Gregorian calendar. I get the same
results using OS (Julian). What am I doing wrong here? The ISO
calendar does have a year zero. If I include the E (Era) component
in the picture string, I do get "BC", but I don't see why the
correct negative-one year is being changed to an incorrect
zero-year.

This is using Saxon 9.4 (the one distributed with Oxygen 15.2).


I think Saxon tries to do this according to whether or not XSD 1.1 is
enabled. But it's likely to be not very thoroughly tested.

The statement that "there is no year zero in the Gregorian calendar"
is inaccurate.

I was basing my statement partly (shame) on Wikipedia", but also on the
XSLT 2.0 spec, which says:

"When referring to years occurring in antiquity, modern historians
generally use a numbering system in which there is no year zero (the
year before 1 CE is thus 1 BCE). This is the convention that should be
used when the requested calendar is OS (Julian) or AD (Gregorian)."

I don't think the papal bull which is the normative
specification of the Gregorian calendar made any statement on the
matter (though I admit I haven't consulted it, and my Latin is
probably not good enough to make much sense of it anyway). Historians
generally use the Jullian calendar when referring to events prior to
the introduction of the Gregorian calendar. The only definitive
statement I know of that extends the Gregoran calendar into the past
is ISO 8601, and this states that there IS (or WAS) a year zero.

The proleptic Gregorian doesn't, I agree, make much sense when it's
extended this far back, but the project I'm working on is an early
modern one, and most of our date-conversion functions convert between
Julian and Gregorian. Older dates tagged as Julian also come in for the
same conversion. You're right that it's ambiguous, though; this page:
<http://en.wikipedia.org/wiki/Proleptic_Gregorian_calendar> shows a
table in which 1BC Julian is equivalent to 1BC Gregorian, but it also
appears to suggest that ISO 8601 is somehow equivalent to proleptic
Gregorian.

But my assumption was that if I pass a negative year into a format-date
function telling it to use Gregorian (or Julian), I would get back the
same negative year. I guess what's really happening is that I'm passing
a Gregorian date into a function and it's giving me back the ISO
equivalent. If that's what you think is happening too (i.e. it's not a
bug in Saxon, and the zero year is what I should be getting, then I'll
have to wrap it and trap for <=0 year off-by-one errors.


*"Year zero does not exist in the Anno Domini system usually used to
number years in the Gregorian calendar and in its predecessor, the
Julian calendar." <http://en.wikipedia.org/wiki/0_%28year%29>

Cheers,
Martin


Michael Kay Saxonica




--~----------------------------------------------------------------
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
EasyUnsubscribe: http://lists.mulberrytech.com/unsub/xsl-list/1167547
or by email: xsl-list-unsub(_at_)lists(_dot_)mulberrytech(_dot_)com
--~--

<Prev in Thread] Current Thread [Next in Thread>