Project Gutenberg
Project Gutenberg is the oldest producer of free eBooks on the Internet. According to their web site they have more than 15,000 works in their collection and most of these are older literary works which are in the public domain in the United States.
Some of the most popular texts include such classics as, The Adventures of Sherlock Holmes by Sir Arthur Conan Doyle, Alice's Adventures in Wonderland by Lewis Carroll, The War of the Worlds by H.G. Wells and The Complete Works of William Shakespeare by William Shakespeare to name but a few.
If you feel like reading some classic literature, browse their catalog and see what you can find.
posted: 23:10 | 0 comments | tags: ebooks, gutenberg
XSLT to convert from a 24-hour timestamp
I had an XML file in which the timestamp for the file creation was in a 24-hour GMT format. I needed to convert the display date and time to be in the format of, "XXX as of 12:00 a.m., on Oct 17, 2005"
I found some of the code for converting the month name on the internet and the rest I hacked together to handle the 24-hour and GMT conversion.
Longer lines are split with a "\" character which should be removed before you use the code.
<!-- Start: XSLT date and time formatting template -->
<!-- e.g. 2005-07-18T17:59:30.187-08:00 -->
<xsl:template name="format-date-time">
<xsl:param name="date" />
<xsl:variable name="year" select="substring($date, 1, 4)" />
<xsl:variable name="month" select="substring($date, 6, 2)" />
<xsl:variable name="day" select="substring($date, 9, 2)" />
<xsl:variable name="day2" select="translate($day, '0', '')" />
<xsl:variable name="monthName" \
select="substring('JanFebMarAprMayJunJulAugSebOctNovDec', \
substring-before(substring-after($date,'-'),'-')*3-2,3)" />
<xsl:variable name="hour24" select="substring($date, 12, 2) - 8" />
<xsl:variable name="minute" select="substring($date, 15, 2)" />
<xsl:variable name="second" select="substring($date, 18, 2)" />
<xsl:variable name="hour12">
<xsl:choose>
<xsl:when test="$hour24 < 0">
<xsl:value-of select="12 + $hour24" />
</xsl:when>
<xsl:when test="$hour24 = 0">
<xsl:value-of select="12" />
</xsl:when>
<xsl:when test="$hour24 = 12">
<xsl:value-of select="$hour24" />
</xsl:when>
<xsl:when test="$hour24 > 12">
<xsl:value-of select="$hour24 - 12" />
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="$hour24" />
</xsl:otherwise>
</xsl:choose>
</xsl:variable>
<xsl:variable name="meridiem">
<xsl:choose>
<xsl:when test="$hour24 < 0">p.m.</xsl:when>
<xsl:when test="$hour24 >= 12">p.m.</xsl:when>
<xsl:otherwise>a.m.</xsl:otherwise>
</xsl:choose>
</xsl:variable>
<xsl:value-of select="concat($hour12, ':', $minute, ':', $second, ' ', \
$meridiem, ' on ', $monthName, ' ', $day2, ', ', $year)" />
</xsl:template>
<!-- End: XSLT date and time formatting template -->
posted: 00:24 | 0 comments | tags: programming, xml, xslt