You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@daffodil.apache.org by "Costello, Roger L." <co...@mitre.org> on 2019/10/01 12:38:10 UTC
How to parse seconds since epoch as a year value?
Hello DFDL community,
My binary input file contains the number of seconds since epoch for the start of a year.
For example, the number of seconds since epoch for the start of 1998 is: 883612800
I want the XML to just show the year (not month, day, and time).
For example, I want the XML to show this:
<Date>1998</Date>
I thought this would do the job:
<xs:element name="Date" type="xs:dateTime"
dfdl:lengthKind="explicit"
dfdl:length="4"
dfdl:binaryCalendarRep="binarySeconds"
dfdl:calendarPattern="yyyy"
dfdl:calendarPatternKind="explicit"
dfdl:lengthUnits="bytes"
dfdl:binaryCalendarEpoch="1970-01-01T00:00:00" />
But apparently that's not correct.
What is the correct way to do it, please?
/Roger
Re: How to parse seconds since epoch as a year value?
Posted by Steve Lawrence <st...@gmail.com>.
binarySeconds only works for xs:dateTime elements, which means that the
resulting infoset will also have a day/month/year/hour/minute/second
parts. There's no way around that. Note that the dfdl:calendarPattern
does not describe the format of the infoset, but is used to describe the
format of input calendar textual data. The infoset will always be
YYYY-mm-dd hh:mm:ss.
If you wanted only the year, you would need to parse the field as a full
dateTime, and then use inputValueCalc to extract just the year. For example:
<xs:element name="root">
<xs:complexType>
<xs:sequence>
<xs:element name="dateTime" type="xs:dateTime"
dfdl:lengthKind="explicit"
dfdl:lengthUnits="bytes"
dfdl:length="4"
dfdl:binaryCalendarRep="binarySeconds"
dfdl:binaryCalendarEpoch="1970-01-01T00:00:00" />
<xs:element name="year" type="xs:int"
dfdl:inputValueCalc="{ fn:year-from-dateTime(../dateTime) }" />
</xs:sequence>
</xs:complexType>
</xs:element>
On 10/1/19 8:38 AM, Costello, Roger L. wrote:
> Hello DFDL community,
>
> My binary input file contains the number of seconds since epoch for the start of a year.
>
> For example, the number of seconds since epoch for the start of 1998 is: 883612800
>
> I want the XML to just show the year (not month, day, and time).
>
> For example, I want the XML to show this:
>
> <Date>1998</Date>
>
> I thought this would do the job:
>
> <xs:element name="Date" type="xs:dateTime"
> dfdl:lengthKind="explicit"
> dfdl:length="4"
> dfdl:binaryCalendarRep="binarySeconds"
> dfdl:calendarPattern="yyyy"
> dfdl:calendarPatternKind="explicit"
> dfdl:lengthUnits="bytes"
> dfdl:binaryCalendarEpoch="1970-01-01T00:00:00" />
>
> But apparently that's not correct.
>
> What is the correct way to do it, please?
>
> /Roger
>