I don't know magic built-in formula or template. I would just let the xsl do all the labour.
[tt]
[blue]<!-- variable name: given, alias x -->[/blue]
<xsl:variable name="given" select="'2006-01-17T17:30:00.0000000-08:00'" />
<xsl:variable name="y" select="substring-before($given,'T')" />
<xsl:variable name="CCYY" select="substring-before($y,'-')" />
<xsl:variable name="tmp" select="substring-after($y,'-')" />
<xsl:variable name="MM" select="substring-before($tmp,'-')" />
<xsl:variable name="DD" select="substring-after($tmp,'-')" />
<xsl:variable name="z" select="substring-after($given,'T')" />
<xsl:variable name="hh" select="substring-before($z,':')" />
<xsl:variable name="tmp2" select="substring-after($z,':')" />
<xsl:variable name="mm" select="substring-before($tmp2,':')" />
<xsl:variable name="tmp3" select="substring-after($tmp2,':')" />
<xsl:variable name="hh_norm">
<xsl:choose>
<xsl:when test="$hh > 12">
<xsl:value-of select="$hh - 12" />
</xsl:when>
<xsl

therwise>
<xsl:value-of select="$hh" />
</xsl

therwise>
</xsl:choose>
</xsl:variable>
<xsl:variable name="sffx">
<xsl:choose>
<xsl:when test="$hh > 12">
<xsl:value-of select="'pm'" />
</xsl:when>
<xsl

therwise>
<xsl:value-of select="'am'" />
</xsl

therwise>
</xsl:choose>
</xsl:variable>
<xsl:variable name="mm_norm" select="$mm" />
<xsl:variable name="result" select="concat($MM,'/',$DD,'/',$CCYY,' ',$hh_norm,':',$mm_norm,' ',$sffx)" />
[blue]<!-- display result here -->
<xsl:value-of select="$result" />[/blue]
[/tt]
You might have some format-number to do to improve fixed length integer according to need.