Solved

How to Use XSLT to convert Epoch time

Posted on 2010-09-13
12
2,963 Views
Last Modified: 2013-11-18
I'm new to XSLT; we're starting to use version 2.

In my 3rd party XML document, there are recurring <TIME> tags. The <TIME> can be under the <CUSTOMER>, the <ORDER>, the <BACKORDER> etc. The value of <TIME> is an epoch time value.

I would like to either:
a) transform all of the values of <TIME> to format mm-dd-yyyy  or
b) add another node, say <READABLETIME>, with the mm-dd-yyyy value, and place it after (or before) the <TIME>

Can someone please show me how to structure this? I would prefer not to have to know all of the possible paths to <TIME>.

Thanks.
0
Comment
Question by:AIBMass
  • 7
  • 5
12 Comments
 
LVL 60

Expert Comment

by:Geert Bormans
ID: 33666640
Try this
<?xml version="1.0" encoding="UTF-8"?>

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"

    xmlns:xs="http://www.w3.org/2001/XMLSchema" exclude-result-prefixes="xs"

     version="2.0">

<xsl:template match="TIME">

    <xsl:copy-of select="."/>

    <READABLETIME>

        <xsl:value-of select="substring-before(string(xs:dateTime('1970-01-01T00:00:00') + xs:dayTimeDuration(concat('PT', ., 'S'))), 'T')"></xsl:value-of>

    </READABLETIME>

</xsl:template>

</xsl:stylesheet>

Open in new window

0
 
LVL 60

Accepted Solution

by:
Geert Bormans earned 250 total points
ID: 33666724
Note that by having a template for <TIME> you can easily organise your stylesheet in a way that it activates each time there is a <TIME> element. Just use apply-templates consequently

Note that I cut of the date part. You can easily construct the mm-dd-yyy format by using functions such as day-from-dateTime() etc

this XML
<TIME>1234567890</TIME>

gives me this result
<TIME>1234567890</TIME>
<READABLETIME>2009-02-13</READABLETIME>
0
 

Author Closing Comment

by:AIBMass
ID: 33671808
Yes, perfect, thanks.
0
 
LVL 60

Expert Comment

by:Geert Bormans
ID: 33671825
welcome
0
 

Author Comment

by:AIBMass
ID: 33685645

Cannot find the script or external object that implements prefix 'http://www.w3.org/2001/XMLSchema'
0
 
LVL 60

Expert Comment

by:Geert Bormans
ID: 33685753
using an XSLT1 processor instead of a xslt2 processor I am afraid
0
3 Use Cases for Connected Systems

Our Dev teams are like yours. They’re continually cranking out code for new features/bugs fixes, testing, deploying, testing some more, responding to production monitoring events and more. It’s complex. So, we thought you’d like to see what’s working for us.

 

Author Comment

by:AIBMass
ID: 33694669
upgraded to XSLT2 processor.  Thanks.  

Above:
<xsl:value-of select="substring-before(string(xs:dateTime('1970-01-01T00:00:00') + xs:dayTimeDuration(concat('PT', ., 'S'))), 'T')"></xsl:value-of>

Causes:  
Invalid duration value 'PT1282679470737S'
0
 
LVL 60

Expert Comment

by:Geert Bormans
ID: 33694904
which xslt processor is that?

13 digits for seconds in epoch time seems a lot
0
 

Author Comment

by:AIBMass
ID: 33694992
Saxon - Home Edition

maybe they're miliseconds?  The xml file is sent to us.  The error message says,

'Invalid duration value 'PT1282679470737S' <non-numeric component>
0
 

Author Comment

by:AIBMass
ID: 33695067
Looks like we had bad data.  If we truncate the input, it works great.  
Thanks for the insight.  
0
 
LVL 60

Expert Comment

by:Geert Bormans
ID: 33695099
explanation, highest possible integer on a 32bit system is 2147483647
the code works for that number, and not for anything higher
0
 
LVL 60

Expert Comment

by:Geert Bormans
ID: 33695119
This tells me that
2038-01-19
would be an interesting day for epoch time and 32-bit computers
0

Featured Post

3 Use Cases for Connected Systems

Our Dev teams are like yours. They’re continually cranking out code for new features/bugs fixes, testing, deploying, testing some more, responding to production monitoring events and more. It’s complex. So, we thought you’d like to see what’s working for us.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

Title # Comments Views Activity
Microsoft Edge 9 94
SharePoint 2013 Blog Template 2 37
Problem to picture file 3 68
Help with a If commands in MS word 2010 when using with a XML drop down box 5 30
I was working on a PowerPoint add-in the other day and a client asked me "can you implement a feature which processes a chart when it's pasted into a slide from another deck?". It got me wondering how to hook into built-in ribbon events in Office.
Browsers only know CSS so your awesome SASS code needs to be translated into normal CSS. Here I'll try to explain what you should aim for in order to take full advantage of SASS.
The viewer will receive an overview of the basics of CSS showing inline styles. In the head tags set up your style tags: (CODE) Reference the nav tag and set your properties.: (CODE) Set the reference for the UL element and styles for it to ensu…
Learn how to create flexible layouts using relative units in CSS.  New relative units added in CSS3 include vw(viewports width), vh(viewports height), vmin(minimum of viewports height and width), and vmax (maximum of viewports height and width).

863 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

23 Experts available now in Live!

Get 1:1 Help Now