Thanks for the quick reply!

I don't have a copy of the ISO8601 standard, unfortunately it costs $134.  But 
the W3C XML Schema datatype xs:duration uses the same format (see 
http://www.w3.org/TR/xmlschema-2/#duration), and they indicate that the sign 
should lead the entire string.  Is the XML Schema datatype just a subset of the 
ISO8601 format that specifies a particular placement of the sign?

Is there a way I could build my own PeriodFormatterBuilder to define this?  I 
have been poking around with it, but I don't see an API for controlling where 
the minus sign is placed.  One of the threads from a few years ago 
(http://sourceforge.net/mailarchive/message.php?msg_id=28027662) seems to 
indicate that the fields are independently signed, so I'm not sure how easy it 
would be to aggregate this into an overall sign - you'd potentially have to sum 
the fields to determine the overall sign.

Thanks for any ideas!
-Craig


-----Original Message-----
From: Stephen Colebourne [mailto:scolebou...@joda.org] 
Sent: Wednesday, June 19, 2013 10:48 AM
To: Discussion of the Joda project
Subject: Re: [Joda-interest] How to handle Period with negative length?

Joda-Time doe snot support this XML encoding with a leading sign. Its not a 
standard ISO-8601 format AFAICT. Instead, we use P-120D.
Stephen

On 19 June 2013 15:31, Gemmill, Craig <craig.gemm...@tridium.com> wrote:
> Hi all-
>
>
>
> I'm new to using Joda-time, but I have a question about using Period 
> with negative times.  According to the XML Schema xs:duration 
> datatype, and as far as I can tell, the ISO8601 format, a negative 
> duration would be expressed with a leading minus sign.  For example, 
> minus 120 days would be "-P120D".  However, I tried a quick 
> 'roundtrip' test using org.joda.time.Period and 
> org.joda.time.format.ISOPeriodFormat, and this doesn't seem to work:
>
>
>
> import org.joda.time.Period;
>
> import org.joda.time.format.ISOPeriodFormat;
>
>
>
> public class PeriodTester
>
> {
>
>   public static void main(String[] args)
>
>   {
>
>     Period p = new Period(-8);
>
>     String s = ISOPeriodFormat.standard().print(p);
>
>     Period p1 = ISOPeriodFormat.standard().parsePeriod(s);
>
>     System.out.println("p:"+p+"; ->s:"+s+"; ->p1:"+p1);
>
>   }
>
> }
>
>
>
> I would expect this to output:
>
> p:-PT0.008S; ->s:-PT0.008S; ->p1:-PT0.008S
>
>
>
> But instead I get
>
> p:PT-0.008S; ->s:PT-0.008S; ->p1:PT0.008S
>
>
>
> So this is not able to survive an encode/decode.  It appears that the 
> encoder is not putting the minus sign in the right place, but the 
> decoder is expecting a leading sign?
>
>
>
> Is there a better way to encode the Period so that it uses a leading 
> minus sign?
>
>
>
> Thanks!
>
>
>
>
> ----------------------------------------------------------------------
> -------- This SF.net email is sponsored by Windows:
>
> Build for Windows Store.
>
> http://p.sf.net/sfu/windows-dev2dev
> _______________________________________________
> Joda-interest mailing list
> Joda-interest@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/joda-interest
>

------------------------------------------------------------------------------
This SF.net email is sponsored by Windows:

Build for Windows Store.

http://p.sf.net/sfu/windows-dev2dev
_______________________________________________
Joda-interest mailing list
Joda-interest@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/joda-interest

------------------------------------------------------------------------------
This SF.net email is sponsored by Windows:

Build for Windows Store.

http://p.sf.net/sfu/windows-dev2dev
_______________________________________________
Joda-interest mailing list
Joda-interest@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/joda-interest

Reply via email to