ASPN ActiveState Programmer Network
ActiveState
/ Home / Perl / PHP / Python / Tcl / XSLT /
/ Safari / My ASPN /
Cookbooks | Documentation | Mailing Lists | Modules | News Feeds | Products | User Groups


Recent Messages
List Archives
About the List
List Leaders
Subscription Options

View Subscriptions
Help

View by Topic
ActiveState
.NET Framework
Open Source
Perl
PHP
Python
Tcl
Web Services
XML & XSLT

View by Category
Database
General
SOAP
System Administration
Tools
User Interfaces
Web Programming
XML Programming


MyASPN >> Mail Archive >> exslt
exslt
[exslt] very low priority - date:add 'billionthSecBug'
by Bruce Krautbauer other posts by this author
Mar 21 2002 3:45PM messages near this date
Re: [exslt] very low priority - date:add 'billionthSecBug' | [exslt] problem with durations with negative time values in date:add template
and just to show you how anal I can be... (poor Jeni, she must be a saint to put up with all
 of us!)  Jeni, BTW, in looking back at the original note I sent you it looks like the billi
onthSecBug.xsl code was corrupted during the cut'n paste; sorry.

Hi Jeni,

This one will either make you laugh or drive you crazy.  Maybe both.

I was continuing on my date:add testing by checking how decimal seconds were handled.  Being
 studious I thought I would check down to 10^-9.  Everything works as I expected except in o
ne case, which is in the middle of the testing.  I've attached a text version of my output b
elow.  Notice that when the duration is PT0.0000001S for some reason the result loses the 1x
10^-9.  The base is the same for all of the offsets.  I can see nothing in the code that sho
uld cause this to happen.  It happens with both MSXML 4 and Saxon 6.0.2.  My data and styles
heet are also included.

Any ideas?  This wouldn't have anything to do with the British misunderstanding of what a bi
llion is, would it? ;)

Thanks,
Bruce

<output> 
timeStudy
Check to see how fractional seconds are handled
Base: 2002-01-01T00:00:00.000000001
Offset Expected Calculated Template Comment 
PT0.1S 2002-01-01T00:00:00.100000001 2002-01-01T00:00:00.100000001 add 1/10 second 
PT0.01S 2002-01-01T00:00:00.010000001 2002-01-01T00:00:00.010000001 add 1/100 second 
PT0.001S 2002-01-01T00:00:00.001000001 2002-01-01T00:00:00.001000001 add 1/1000 second 
PT0.0001S 2002-01-01T00:00:00.000100001 2002-01-01T00:00:00.000100001 add 1/10,000 second 
PT0.00001S 2002-01-01T00:00:00.000010001 2002-01-01T00:00:00.000010001 add 1/100,000 second 
PT0.000001S 2002-01-01T00:00:00.000001001 2002-01-01T00:00:00.000001001 add 1/1,000,000 seco
nd 
PT0.0000001S 2002-01-01T00:00:00.000000101 2002-01-01T00:00:00.000000100 add 1/10,000,000 se
cond 
PT0.00000001S 2002-01-01T00:00:00.000000011 2002-01-01T00:00:00.000000011 add 1/100,000,000 
second 
PT0.000000001S 2002-01-01T00:00:00.000000002 2002-01-01T00:00:00.000000002 add 1/1,000,000,0
00 second 
-PT0.1S 2001-12-31T11:59:59.9 2001-12-31T-01:-01:0-0.099999 subtract one tenth second 
</output> 

<billionthSecBug.xml> 
<?xml-stylesheet type="text/xsl" href="billionthSecBug.xsl"?> 
<timeStudy xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
	<test> 
		<comment> Check to see how fractional seconds are handled</comment>
		<dateTimeBase> 2002-01-01T00:00:00.000000001</dateTimeBase>
		<offset> 
			<comment> add 1/10 second</comment>
			<durationOffset> PT0.1S</durationOffset>
			<dateTimeExpected> 2002-01-01T00:00:00.100000001</dateTimeExpected>
		</offset> 
		<offset> 
			<comment> add 1/100 second</comment>
			<durationOffset> PT0.01S</durationOffset>
			<dateTimeExpected> 2002-01-01T00:00:00.010000001</dateTimeExpected>
		</offset> 
		<offset> 
			<comment> add 1/1000 second</comment>
			<durationOffset> PT0.001S</durationOffset>
			<dateTimeExpected> 2002-01-01T00:00:00.001000001</dateTimeExpected>
		</offset> 
		<offset> 
			<comment> add 1/10,000 second</comment>
			<durationOffset> PT0.0001S</durationOffset>
			<dateTimeExpected> 2002-01-01T00:00:00.000100001</dateTimeExpected>
		</offset> 
		<offset> 
			<comment> add 1/100,000 second</comment>
			<durationOffset> PT0.00001S</durationOffset>
			<dateTimeExpected> 2002-01-01T00:00:00.000010001</dateTimeExpected>
		</offset> 
		<offset> 
			<comment> add 1/1,000,000 second</comment>
			<durationOffset> PT0.000001S</durationOffset>
			<dateTimeExpected> 2002-01-01T00:00:00.000001001</dateTimeExpected>
		</offset> 
		<offset> 
			<comment> add 1/10,000,000 second</comment>
			<durationOffset> PT0.0000001S</durationOffset>
			<dateTimeExpected> 2002-01-01T00:00:00.000000101</dateTimeExpected>
		</offset> 
		<offset> 
			<comment> add 1/100,000,000 second</comment>
			<durationOffset> PT0.00000001S</durationOffset>
			<dateTimeExpected> 2002-01-01T00:00:00.000000011</dateTimeExpected>
		</offset> 
		<offset> 
			<comment> add 1/1,000,000,000 second</comment>
			<durationOffset> PT0.000000001S</durationOffset>
			<dateTimeExpected> 2002-01-01T00:00:00.000000002</dateTimeExpected>
		</offset> 
		<offset> 
			<comment> subtract one tenth second</comment>
			<durationOffset> -PT0.1S</durationOffset>
			<dateTimeExpected> 2001-12-31T11:59:59.9</dateTimeExpected>
		</offset> 
	</test> 
</timeStudy> 
</billionthSecBug.xml> 

<billionthSecBug.xsl> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:date="h
ttp://exslt.org/dates-and-times" extension-element-prefixes="date"> 
	<xsl:import href="date.add.template.xsl" /> 
	<xsl:template match="/"> 
		<xsl:apply-templates select="timeStudy" /> 
	</xsl:template> 
	<xsl:template match="timeStudy"> 
		<xsl:element name="h1"> 
			<xsl:text> timeStudy</xsl:text>
		</xsl:element> 
		<xsl:apply-templates select="test" /> 
	</xsl:template> 
	<xsl:template match="test"> 
		<xsl:element name="h2"> 
			<xsl:apply-templates select="comment" /> 
		</xsl:element> 
		<xsl:element name="h3"> 
			<xsl:text> Base: </xsl:text>
			<xsl:apply-templates select="dateTimeBase" /> 
		</xsl:element> 
		<xsl:element name="table"> 
			<xsl:element name="tr"> 
				<xsl:element name="th"> Offset</xsl:element>
				<xsl:element name="th"> Expected</xsl:element>
				<xsl:element name="th"> Calculated Template</xsl:element>
				<xsl:element name="th"> Comment</xsl:element>
			</xsl:element> 
			<xsl:apply-templates select="offset" /> 
		</xsl:element> 
	</xsl:template> 
	<xsl:template match="comment | dateTimeBase | durationOffset | dateTimeExpected"> 
		<xsl:value-of select="." /> 
	</xsl:template> 
	<xsl:template match="offset"> 
		<xsl:variable name="dateTimeResulttemplate"> 
			<xsl:call-template name="date:add"> 
				<xsl:with-param name="date-time" select="../dateTimeBase" /> 
				<xsl:with-param name="duration" select="durationOffset" /> 
			</xsl:call-template> 
		</xsl:variable> 
		<xsl:element name="tr"> 
			<xsl:element name="td"> 
				<xsl:apply-templates select="durationOffset" /> 
			</xsl:element> 
			<xsl:element name="td"> 
				<xsl:apply-templates select="dateTimeExpected" /> 
			</xsl:element> 
			<xsl:element name="td"> 
				<xsl:element name="div"> 
					<xsl:if test="$dateTimeResulttemplate!=dateTimeExpected"> 
						<xsl:attribute name="style"> color:red</xsl:attribute>
					</xsl:if> otab	</offset>
		<of
					<xsl:value-of select="$dateTimeResulttemplate" /> 
				</xsl:element> 
			</xsl:element> 
			<xsl:element name="td"> 
				<xsl:apply-templates select="comment" /> 
			</xsl:element> 
		</xsl:element> 
	</xsl:template> 
</xsl:stylesheet> 
</billionthSecBug.xsl> 

_______________________________________________
exslt mailing list
list@[...].org
http://www.exslt.org/list

Privacy Policy | Email Opt-out | Feedback | Syndication
© ActiveState Software Inc. All rights reserved