Преобразование календарной даты в юлианскую дату - PullRequest
0 голосов
/ 01 июля 2019

Пожалуйста, помогите мне с кодом преобразования данной календарной даты в юлианскую дату (ГГГГММ) в 7-байтовом формате, используя xslt, пожалуйста ...

Заранее спасибо!

Ответы [ 2 ]

0 голосов
/ 02 июля 2019

Формат даты JD Edwards (который часто называют неправильно как формат даты JDE Julian ) - это формат CYYDDD, где:

  • C - это число, обозначающее столетие: значение 0 соответствует годам с 1900 по 1999 год, значение 1 год с 2000 по 2099 год и т. Д .;
  • YY обозначает год в данном веке;
  • DDD - номер дня в данном году.

Таким образом, например, дата 2019-07-02 будет представлена ​​как 119183.

Чтобы преобразовать дату в формате YYYY-MM-DD в формат даты JD Edwards, используя XSLT 1.0, , вы можете использовать:

<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


Добавлено:

Если вам действительно нужен ГГГГДДД, то вы можете упростить приведенное выше до:

<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>
0 голосов
/ 02 июля 2019

В XSLT 2.0 функция format-date () с изображением [Y0001][d001] должна дать вам то, что вы хотите.

Если вы не можете использовать XSLT 2.0, посмотрите, поддерживает ли ваш процессор XSLT расширения даты / времениопределено на сайте www.exslt.org

...