| Subject: REx6: [xsl] GMT to BST converter From: cknell@xxxxxxxxxx Date: Mon, 18 Apr 2005 15:01:15 -0400 | 
<?xml version="1.0" encoding="UTF-8" ?> <date-list> <Date>Sunday, 27 March, 2005, 01:21 GMT</Date> <Date>Sunday, 27 May, 2005, 01:21 GMT</Date> <Date>Sunday, 27 October, 2005, 01:21 GMT</Date> <Date>Sunday, 27 January, 2005, 01:21 GMT</Date> <Date>Sunday, 27 June, 2005, 23:21 GMT</Date> </date-list>
The output document: <?xml version="1.0" encoding="UTF-8"?> <date-list> <Date>Sunday, 27 March, 2005, 2:21 BST</Date> <Date>Sunday, 27 May, 2005, 2:21 BST</Date> <Date>Sunday, 27 October, 2005, 01:21 GMT</Date> <Date>Sunday, 27 January, 2005, 01:21 GMT</Date> <Date>Monday, 28 June, 2005, 00:21 BST</Date> </date-list>
The stylesheet: <?xml version="1.0" encoding="UTF-8" ?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method="xml" indent="yes" encoding="UTF-8" /> <xsl:strip-space elements="*" />
<xsl:template match="/"> <xsl:apply-templates /> </xsl:template>
<xsl:template match="date-list"> <date-list> <xsl:apply-templates /> </date-list> </xsl:template>
 <xsl:template match="Date">
   <!-- Some convenience variables -->
     <!-- Day of the Week (e.g., Sunday) -->
     <xsl:variable name="DOW" select="substring-before(., ', ')" />     <!-- Date and month substring (e.g., 14 January) -->
     <xsl:variable name="dm" select="substring-before(substring-after(.,', '),', ')" />     <!-- Month name (e.g., January) -->
     <xsl:variable name="M" select="substring-after($dm,' ')" />     <!-- Day number (e.g., 14) -->
     <xsl:variable name="D" select="substring-before($dm,' ')" />     <!-- Hour:Minutes -->
     <xsl:variable name="h" select="substring-before(substring-after(substring-after(substring-after(.,$dm), ', '), ', '), ' GMT')" />     <!-- Year with surrounding characters -->
     <xsl:variable name="y" select="substring-after(substring-before(., $h),$dm)" />     <!-- Year stripped of surrounding characters -->
     <xsl:variable name="Y" select="substring-before(substring-after($y, ', '), ',')" />   <xsl:variable name="BST-in-effect">
     <xsl:choose>
       <xsl:when test="$M = 'November' or $M = 'December' or $M = 'January' or $M = 'February'">False</xsl:when>
       <xsl:when test="$M = 'April' or $M = 'May' or $M = 'June' or $M = 'July' or $M = 'August' or $M = 'September'">True</xsl:when>
       <xsl:when test="$M = 'October'">
           <xsl:choose>
             <xsl:when test="$DOW = 'Sunday' and $D > 24">False</xsl:when>
             <xsl:when test="$DOW = 'Monday' and $D > 25">False</xsl:when>
             <xsl:when test="$DOW = 'Tuesday' and $D > 26">False</xsl:when>
             <xsl:when test="$DOW = 'Wednesday' and $D > 27">False</xsl:when>
             <xsl:when test="$DOW = 'Thursday' and $D > 28">False</xsl:when>
             <xsl:when test="$DOW = 'Friday' and $D > 29">False</xsl:when>
             <xsl:when test="$DOW = 'Saturday' and $D > 30">False</xsl:when>
             <xsl:otherwise>True</xsl:otherwise>
           </xsl:choose>
         </xsl:when>
         <xsl:when test="$M='March'">
           <!-- Edge cases for changing to BST -->
           <xsl:choose>
             <xsl:when test="$DOW = 'Sunday' and $D > 24">True</xsl:when>
             <xsl:when test="$DOW = 'Monday' and $D > 25">True</xsl:when>
             <xsl:when test="$DOW = 'Tuesday' and $D > 26">True</xsl:when>
             <xsl:when test="$DOW = 'Wednesday' and $D > 27">True</xsl:when>
             <xsl:when test="$DOW = 'Thursday' and $D > 28">True</xsl:when>
             <xsl:when test="$DOW = 'Friday' and $D > 29">True</xsl:when>
             <xsl:when test="$DOW = 'Saturday' and $D > 30">True</xsl:when>
             <xsl:otherwise>False</xsl:otherwise>
           </xsl:choose>
         </xsl:when>
     </xsl:choose>
   </xsl:variable>   <xsl:choose>
     <xsl:when test="$BST-in-effect = 'False'">
       <xsl:copy-of select="." />
     </xsl:when>
     <xsl:otherwise>
     <!-- BST is in effect. Adjustments to the day of week, date, month, and hour may be necessary -->
       <xsl:variable name="D-BST">
         <!-- Check to see if the date must roll over -->
         <xsl:choose>
           <xsl:when test="number(substring-before($h, ':')) = 23">
             <xsl:choose>
               <!-- Cases where the roll-over brings the first day of the subsequent month -->
               <xsl:when test="$M = 'March' and $D = '31'">1</xsl:when>
                 <xsl:when test="$M = 'April' and $D = '30'">1</xsl:when>
                 <xsl:when test="$M = 'May' and $D = '31'">1</xsl:when>
                 <xsl:when test="$M = 'June' and $D = '30'">1</xsl:when>
                 <xsl:when test="$M = 'July' and $D = '31'">1</xsl:when>
                 <xsl:when test="$M = 'August' and $D = '31'">1</xsl:when>
                 <xsl:when test="$M = 'September' and $D = '30'">1</xsl:when>
                 <!-- Necessary only to add one to the current date -->
                 <xsl:otherwise><xsl:value-of select="number($D) + 1" /></xsl:otherwise>
             </xsl:choose>
           </xsl:when>
           <!-- No adjustment necessary -->
           <xsl:otherwise><xsl:value-of select="$D" /></xsl:otherwise>
         </xsl:choose>
       </xsl:variable>
       <xsl:variable name="DOW-BST">
         <!-- Check to see if the day of the week must roll over -->
         <xsl:choose>
           <xsl:when test="number(substring-before($h, ':')) = 23">
             <xsl:choose>
               <xsl:when test="$DOW = 'Sunday'">Monday</xsl:when>
               <xsl:when test="$DOW = 'Monday'">Tuesday</xsl:when>
               <xsl:when test="$DOW = 'Tuesday'">Wednesday</xsl:when>
               <xsl:when test="$DOW = 'Wednesday'">Thursday</xsl:when>
               <xsl:when test="$DOW = 'Thursday'">Friday</xsl:when>
               <xsl:when test="$DOW = 'Friday'">Saturday</xsl:when>
               <xsl:when test="$DOW = 'Saturday'">Sunday</xsl:when>
             </xsl:choose>
           </xsl:when>
           <xsl:otherwise><xsl:value-of select="$DOW" /></xsl:otherwise>
         </xsl:choose>
       </xsl:variable>
       <xsl:variable name="H-BST">
         <!-- Adjust the hour if necessary -->
         <xsl:choose>
           <xsl:when test="number(substring-before($h, ':')) = 23"><xsl:value-of select="concat('00:', substring-after($h, ':'))" /></xsl:when>
           <xsl:otherwise><xsl:value-of select="concat(number(substring-before($h, ':')) + 1, ':', substring-after($h, ':'))" /></xsl:otherwise>
         </xsl:choose>
       </xsl:variable>
       <xsl:variable name="M-BST">
         <!-- Adjust the month if necessary -->
         <xsl:choose>
           <xsl:when test="number(substring-before($h, ':')) = 23">
             <xsl:choose>
               <xsl:when test="$M = 'March' and $D = '31'">April</xsl:when>
               <xsl:when test="$M = 'April' and $D = '30'">May</xsl:when>
               <xsl:when test="$M = 'May' and $D = '31'">June</xsl:when>
               <xsl:when test="$M = 'June' and $D = '30'">July</xsl:when>
               <xsl:when test="$M = 'July' and $D = '31'">August</xsl:when>
               <xsl:when test="$M = 'August' and $D = '31'">September</xsl:when>
               <xsl:when test="$M = 'September' and $D = '30'">October</xsl:when>
               <xsl:otherwise><xsl:value-of select="$M" /></xsl:otherwise>
             </xsl:choose>
           </xsl:when>
           <xsl:otherwise><xsl:value-of select="$M" /></xsl:otherwise>
         </xsl:choose>
       </xsl:variable>
       <Date><xsl:value-of select="$DOW-BST" />, <xsl:value-of select="concat($D-BST, ' ')" /> <xsl:value-of select="$M-BST" />, <xsl:value-of select="$Y" />, <xsl:value-of select="$H-BST" /> BST</Date>
     </xsl:otherwise>
   </xsl:choose>
 </xsl:template></xsl:stylesheet> -- Charles Knell cknell@xxxxxxxxxx - email
-----Original Message----- From: cknell@xxxxxxxxxx Sent: Mon, 18 Apr 2005 07:42:38 -0400 To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx Subject: RE: RE: RE: RE: RE: [xsl] GMT to BST converter
There are some omissions, one of which I have corrected (see the reply to Dave Pawson), but there are no hard-coded specific dates and times. Please tell me where you see them and I'll explain what I think they really are. -- Charles Knell cknell@xxxxxxxxxx - email
-----Original Message----- From: tom tom <tomxsllist@xxxxxxxxxxx> Sent: Mon, 18 Apr 2005 11:05:11 +0100 To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx Subject: RE: RE: RE: RE: [xsl] GMT to BST converter
| Current Thread | 
|---|
| 
 | 
| <- Previous | Index | Next -> | 
|---|---|---|
| Re: [xsl] XSL-FO & Images, craig webber | Thread | RE: REx6: [xsl] GMT to BST converte, Pawson, David | 
| Re: [Fwd: [xsl] Upgrading Saxon XSL, david_n_bertoni | Date | Re: [xsl] XSL-FO & Images, David Carlisle | 
| Month |