日历日期到儒略日期的转换

时间:2019-07-01 17:24:51

标签: xslt julian-date

请帮助我使用xslt将给定的日历日期转换为儒略日期(YYYYMMM)7字节格式的代码...

谢谢!

2 个答案:

答案 0 :(得分:0)

在XSLT 2.0中,带有图片[Y0001][d001]的format-date()应该可以为您提供所需的内容。

如果您不能使用XSLT 2.0,请查看您的XSLT处理器是否支持在www.exslt.org上定义的日期/时间扩展名

答案 1 :(得分:0)

JD Edwards日期格式(通常被误称为 JDE Julian日期格式)是CYYDDD格式,其中:

  • C是代表世纪的数字:0表示1900年至1999年之间的年份,2000到2099年之间的值为1,依此类推;
  • YY表示给定世纪的年份;
  • DDD是给定年份的天数。

因此,例如,2019-07-02的日期将表示为119183

要使用 XSLT 1.0将YYYY-MM-DD格式的日期转换为JD Edwards日期格式,

<xsl:template name="date-to-JDE">
    <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="C" select="floor($year div 100) - 19"/>
    <xsl:variable name="YY" select="$year mod 100"/>

    <xsl:variable name="leap" select="not($year mod 4) and $year mod 100 or not($year mod 400)" />
    <xsl:variable name="elapsed-months" select="substring('000031059090120151181212243273304334', 3 * ($month - 1) + 1, 3)"/>
    <xsl:variable name="DDD" select="$elapsed-months + ($month > 2 and $leap) + $day"/> 

    <xsl:value-of select="$C * 100000 + $YY * 1000 + $DDD"/>            
</xsl:template>

演示https://xsltfiddle.liberty-development.net/jyRYYj8


已添加:

如果您确实需要YYYYDDD,则可以将以上内容简化为:

<xsl:template name="date-to-YYYYDDD">
    <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="leap" select="not($year mod 4) and $year mod 100 or not($year mod 400)" />
    <xsl:variable name="elapsed-months" select="substring('000031059090120151181212243273304334', 3 * ($month - 1) + 1, 3)"/>
    <xsl:variable name="DDD" select="$elapsed-months + ($month > 2 and $leap) + $day"/> 

    <xsl:value-of select="$year * 1000 + $DDD"/>            
</xsl:template>