axis-c-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "John Bodfish" <jbodf...@fdusa.com>
Subject RE: float type and date time format
Date Thu, 09 Dec 2004 16:08:31 GMT
Bonjour aussi!

I don't know the answer to most of your questions, but here are some
comments.

You wrote:
	With float number, 77.99 becomes 77.989998 output string under Axis.

I think that's probably because conversion of a string "77.99" to the
representation of a floating point number and back again is likely to lead
to "small" differences. Whether you think 0.000002 is a "small" difference
probably depends on whether you're calculating the size of the moon or your
trajectory to it. :) There's probably a way to restrict the number of
decimal digits in the string representation of the floating point number, in
which case "77.989998" internal representation would get rounded up to
"77.99" when converted to a string.

 
You also wrote:
	I supposed that Z is for TimeZone?

That's a good guess. 'Z' is for "UTC", or Coordinated Universal Time. See
http://en.wikipedia.org/wiki/Coordinated_Universal_Time for more on UTC.

The World Wide Web Consortium has a note about date and time formats
(http://www.w3.org/TR/NOTE-datetime) where it states:

"This profile defines two ways of handling time zone offsets:

1. Times are expressed in UTC (Coordinated Universal Time), with a special
UTC designator ("Z"). 
2. Times are expressed in local time, together with a time zone offset in
hours and minutes. A time zone offset of "+hh:mm" indicates that the
date/time uses a local time zone which is "hh" hours and "mm" minutes ahead
of UTC. A time zone offset of "-hh:mm" indicates that the date/time uses a
local time zone which is "hh" hours and "mm" minutes behind UTC. 

A standard referencing this profile should permit one or both of these ways
of handling time zone offsets."

I don't know what the relevant SOAP standards state, but the date strings
you get look like they both conform.

The string "2004-12-08T00:00:00.0000000-05:00" that .NET/Java produces
represents midnight, the morning of December 8th, 2004 in a time zone that
is 5 hours behind UTC (such as the Eastern Time zone of Canada).

The string "2004-12-09T19:54:32Z" that Axis produces represents December
9th, 2004 at 19:54:32 UTC, which would be 14:54:32 in the Eastern Time Zone
of Canada.

I don't know where the asterisks in the Axis date string come from.

I hope others help with the rest of your questions!

John



-----Original Message-----
From: Jean ANDRE [mailto:jandre@cmtek.com] 
Sent: Thursday, December 09, 2004 9:31 AM
To: axis-c-user@ws.apache.org
Subject: float type and date time format

Bonjour everybody!

Well, I have a strange behavior with floating number and date time format.

 1 ) With float number, 77.99 becomes 77.989998 output string under 
Axis. Why I lost some digits ??????!!!

 2) With datetime format , in c++ test code, I just  moved some fields 
to another one of the same structure and I get the following output 
string: with Axis
    <txnDate>*2004-12-09T19:54:32Z*</txnDate>
  
 I supposed that Z is for TimeZone ?  But how to construct a time to 
obtain such string ?

With dot-net client application and a java application I got the 
following string:
<txnDate>2004-12-08T00:00:00.0000000-05:00</txnDate>

Thanks a lot for your answers. Take care!

Jean .A - Canada


In c++ test code, I put the following code according to the WSDL.

C++ Test code under Microsoft  Visual C++
==============================
class TxnAmount
{
public:
    float amount;
    xsd__string currency;
    TxnAmount();
    ~TxnAmount();
};

    xsd__dateTime txnDate;
    tm* curTime;
    time_t timer;


    amount.amount = 77.99;                // paymentForm.amount
    amount.currency = "USD";            // paymentForm.currency


    memset(&txnDate, 0x00, sizeof(xsd__dateTime));
    timer = time(NULL);
    curTime = localtime( &timer );
    txnDate.tm_isdst    = curTime->tm_isdst;
    txnDate.tm_hour        = curTime->tm_hour;
    txnDate.tm_min        = curTime->tm_min;
    txnDate.tm_sec        = curTime->tm_sec;
    txnDate.tm_wday        = curTime->tm_wday;
    txnDate.tm_yday        = curTime->tm_yday;
    txnDate.tm_mday        = curTime->tm_mday;             // 
paymentForm.txnDateD - day of the month - [1,31]
    txnDate.tm_mon        = curTime->tm_mon;                // 
paymentForm.txnDateM - months since January - [0,11]
    txnDate.tm_year        = curTime->tm_year;                // 
paymentForm.txnDateY - years since 1900

Fragment of the WDSL:
==================
      <xs:element name="txnDate" type="xs:dateTime" minOccurs="0">
      </xs:element>
      <xs:complexType name="TxnAmount">
        <xs:sequence>
          <xs:element name="amount">
            <xs:simpleType>
              <xs:restriction base="xs:float">
                <xs:minInclusive value="0.00"/>
                <xs:maxInclusive value="9999999999.99"/>
              </xs:restriction>
            </xs:simpleType>
          </xs:element>
          <xs:element name="currency" minOccurs="0">
            <xs:simpleType>
              <xs:restriction base="xs:string">
                <xs:enumeration value="USD"/>
                <xs:enumeration value="CAD"/>
              </xs:restriction>
            </xs:simpleType>
          </xs:element>
        </xs:sequence>
      </xs:complexType>


Fragment of the string sent by AXIS ??  Look the field amount !!!!
=============================================
<ns1:txnRequest>
<orderTotal>
<amount>77.989998</amount>
<currency>USD</currency>
</orderTotal>
<billTo>

<txnDate>*2004-12-09T19:54:32Z*</txnDate>




Mime
View raw message