You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-dev@axis.apache.org by se...@apache.org on 2008/03/24 11:58:23 UTC

svn commit: r640375 - /webservices/axis2/trunk/c/util/src/date_time.c

Author: senaka
Date: Mon Mar 24 03:58:22 2008
New Revision: 640375

URL: http://svn.apache.org/viewvc?rev=640375&view=rev
Log:
Fixing bug in date_time

Modified:
    webservices/axis2/trunk/c/util/src/date_time.c

Modified: webservices/axis2/trunk/c/util/src/date_time.c
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/c/util/src/date_time.c?rev=640375&r1=640374&r2=640375&view=diff
==============================================================================
--- webservices/axis2/trunk/c/util/src/date_time.c (original)
+++ webservices/axis2/trunk/c/util/src/date_time.c Mon Mar 24 03:58:22 2008
@@ -31,8 +31,7 @@
     int day;
     int hour;
     int min;
-    int sec;
-    int msec;
+    float sec;
     axis2_bool_t tz_pos;
     int tz_hour;
     int tz_min;
@@ -68,12 +67,7 @@
     date_time->hour = utc_time->tm_hour;
     date_time->min = utc_time->tm_min;
     date_time->sec = utc_time->tm_sec;
-    date_time->msec = axutil_get_milliseconds(env);
-    /* Round off msec */
-    while (date_time->msec && !(date_time->msec % 10))
-    {
-        date_time->msec /= 10;
-    }
+    date_time->sec += (float)axutil_get_milliseconds(env) / 1000;
     date_time->tz_hour = 0;
     date_time->tz_min = 0;
     date_time->tz_pos = AXIS2_TRUE;
@@ -110,19 +104,10 @@
 {
     int hour;
     int min;
-    int sec;
-    int msec;
+    float sec;
     AXIS2_ENV_CHECK(env, AXIS2_FAILURE);
 
-    if (strchr(time_str, '.'))
-    {
-        sscanf(time_str, "%d:%d:%d.%dZ", &hour, &min, &sec, &msec);
-    }
-    else
-    {
-        sscanf(time_str, "%d:%d:%dZ", &hour, &min, &sec);
-        msec = 0;
-    }
+    sscanf(time_str, "%d:%d:%fZ", &hour, &min, &sec);
     if (hour < 0 || hour > 23)
     {
         return AXIS2_FAILURE;
@@ -131,23 +116,13 @@
     {
         return AXIS2_FAILURE;
     }
-    if (sec < 0 || sec > 59)
-    {
-        return AXIS2_FAILURE;
-    }
-    if (msec < 0)
+    if (sec < 0 || sec >= 60)
     {
         return AXIS2_FAILURE;
     }
-    /* Round off msec */
-    while (msec && !(msec % 10))
-    {
-        msec /= 10;
-    }
     date_time->hour = hour;
     date_time->min = min;
     date_time->sec = sec;
-    date_time->msec = msec;
     return AXIS2_SUCCESS;
 }
 
@@ -159,8 +134,7 @@
 {
     int hour;
     int min;
-    int sec;
-    int msec;
+    float sec;
     int tz_hour;
     int tz_min;
 
@@ -179,31 +153,13 @@
 
     if (tz_pos)
     {
-        if (strchr(time_str, '.'))
-        {
-            sscanf(time_str, "%d:%d:%d.%d+%d:%d", &hour, &min,
-                &sec, &msec, &tz_hour, &tz_min);
-        }
-        else
-        {
-            sscanf(time_str, "%d:%d:%d+%d:%d", &hour, &min,
-                &sec, &tz_hour, &tz_min);
-            msec = 0;
-        }
+        sscanf(time_str, "%d:%d:%f+%d:%d", &hour, &min,
+            &sec, &tz_hour, &tz_min);
     }
     else
     {
-        if (strchr(time_str, '.'))
-        {
-            sscanf(time_str, "%d:%d:%d.%d-%d:%d", &hour, &min,
-                &sec, &msec, &tz_hour, &tz_min);
-        }
-        else
-        {
-            sscanf(time_str, "%d:%d:%d-%d:%d", &hour, &min,
-                &sec, &tz_hour, &tz_min);
-            msec = 0;
-        }
+        sscanf(time_str, "%d:%d:%f-%d:%d", &hour, &min,
+            &sec, &tz_hour, &tz_min);
     }
     if (hour < 0 || hour > 23)
     {
@@ -213,19 +169,10 @@
     {
         return AXIS2_FAILURE;
     }
-    if (sec < 0 || sec > 59)
+    if (sec < 0 || sec >= 60)
     {
         return AXIS2_FAILURE;
     }
-    if (msec < 0)
-    {
-        return AXIS2_FAILURE;
-    }
-    /* Round off msec */
-    while (msec && !(msec % 10))
-    {
-        msec /= 10;
-    }
     if (tz_hour < 0 || tz_hour > 14)
     {
         return AXIS2_FAILURE;
@@ -241,7 +188,6 @@
     date_time->hour = hour;
     date_time->min = min;
     date_time->sec = sec;
-    date_time->msec = msec;
     date_time->tz_pos = tz_pos;
     date_time->tz_hour = tz_hour;
     date_time->tz_min = tz_min;
@@ -315,8 +261,7 @@
     int day;
     int hour;
     int min;
-    int sec;
-    int msec;
+    float sec;
     int is_year_neg = 0;
     AXIS2_ENV_CHECK(env, AXIS2_FAILURE);
 
@@ -328,17 +273,8 @@
     {
         is_year_neg++;
     }
-    if (strchr(date_time_str, '.'))
-    {
-        sscanf(date_time_str + is_year_neg, "%d-%d-%dT%d:%d:%d.%dZ", &year,
-            &mon, &day, &hour, &min, &sec, &msec);
-    }
-    else
-    {
-        sscanf(date_time_str + is_year_neg, "%d-%d-%dT%d:%d:%dZ", &year,
-            &mon, &day, &hour, &min, &sec);
-        msec = 0;
-    }
+    sscanf(date_time_str + is_year_neg, "%d-%d-%dT%d:%d:%fZ", &year,
+        &mon, &day, &hour, &min, &sec);
 
     if (is_year_neg)
     {
@@ -376,26 +312,16 @@
     {
         return AXIS2_FAILURE;
     }
-    if (sec < 0 || sec > 59)
+    if (sec < 0 || sec >= 60)
     {
         return AXIS2_FAILURE;
     }
-    if (msec < 0)
-    {
-        return AXIS2_FAILURE;
-    }
-    /* Round off msec */
-    while (msec && !(msec % 10))
-    {
-        msec /= 10;
-    }
     date_time->year = year - 1900;
     date_time->mon = mon - 1;
     date_time->day = day;
     date_time->hour = hour;
     date_time->min = min;
     date_time->sec = sec;
-    date_time->msec = msec;
     return AXIS2_SUCCESS;
 }
 
@@ -410,8 +336,7 @@
     int day;
     int hour;
     int min;
-    int sec;
-    int msec;
+    float sec;
     int tz_hour;
     int tz_min;
     int is_year_neg = 0;
@@ -439,33 +364,13 @@
 
     if (tz_pos)
     {
-        if (strchr(date_time_str, '.'))
-        {
-            sscanf(date_time_str + is_year_neg, "%d-%d-%dT%d:%d:%d.%d+%d:%d", &year,
-                &mon, &day, &hour, &min, &sec, &msec, &tz_hour, &tz_min);
-        }
-        else
-        {
-            sscanf(date_time_str + is_year_neg, "%d-%d-%dT%d:%d:%d+%d:%d", &year,
-                &mon, &day, &hour, &min, &sec, &tz_hour, &tz_min);
-
-            msec = 0;
-        }
+        sscanf(date_time_str + is_year_neg, "%d-%d-%dT%d:%d:%f+%d:%d", &year,
+            &mon, &day, &hour, &min, &sec, &tz_hour, &tz_min);
     }
     else
     {
-        if (strchr(date_time_str, '.'))
-        {
-            sscanf(date_time_str + is_year_neg, "%d-%d-%dT%d:%d:%d.%d-%d:%d", &year,
-                &mon, &day, &hour, &min, &sec, &msec, &tz_hour, &tz_min);
-        }
-        else
-        {
-            sscanf(date_time_str + is_year_neg, "%d-%d-%dT%d:%d:%d-%d:%d", &year,
-                &mon, &day, &hour, &min, &sec, &tz_hour, &tz_min);
-
-            msec = 0;
-        }
+        sscanf(date_time_str + is_year_neg, "%d-%d-%dT%d:%d:%f-%d:%d", &year,
+            &mon, &day, &hour, &min, &sec, &tz_hour, &tz_min);
     }
 
     if (is_year_neg)
@@ -504,19 +409,10 @@
     {
         return AXIS2_FAILURE;
     }
-    if (sec < 0 || sec > 59)
-    {
-        return AXIS2_FAILURE;
-    }
-    if (msec < 0)
+    if (sec < 0 || sec >= 60)
     {
         return AXIS2_FAILURE;
     }
-    /* Round off msec */
-    while (msec && !(msec % 10))
-    {
-        msec /= 10;
-    }
     if (tz_hour < 0 || tz_hour > 14)
     {
         return AXIS2_FAILURE;
@@ -535,7 +431,6 @@
     date_time->hour = hour;
     date_time->min = min;
     date_time->sec = sec;
-    date_time->msec = msec;
     date_time->tz_pos = tz_pos;
     date_time->tz_hour = tz_hour;
     date_time->tz_min = tz_min;
@@ -629,15 +524,6 @@
         return AXIS2_DATE_TIME_COMP_RES_EXPIRED;
     }
 
-    if (date_time->msec < ref->msec)
-    {
-        return AXIS2_DATE_TIME_COMP_RES_NOT_EXPIRED;
-    }
-    else if (date_time->msec > ref->msec)
-    {
-        return AXIS2_DATE_TIME_COMP_RES_EXPIRED;
-    }
-
     return AXIS2_DATE_TIME_COMP_RES_EQUAL;
 }
 
@@ -718,23 +604,18 @@
     {
         return AXIS2_FAILURE;
     }
-    if (msec < 0)
+    if (msec < 0 || msec > 999)
     {
         return AXIS2_FAILURE;
     }
-    /* Round off msec */
-    while (msec && !(msec % 10))
-    {
-        msec /= 10;
-    }
 
     date_time->year = year - 1900;
     date_time->mon = mon - 1;
     date_time->day = day;
     date_time->hour = hour;
     date_time->min = min;
-    date_time->sec = sec;
-    date_time->msec = msec;
+    date_time->sec = (float)sec;
+    date_time->sec += (float)msec / 1000;
 
     return AXIS2_SUCCESS;
 }
@@ -750,16 +631,8 @@
 
     time_str = (axis2_char_t *) AXIS2_MALLOC(env->allocator,
                    sizeof(axis2_char_t) * 32);
-    if (date_time->msec)
-    {
-        sprintf(time_str, "%02d:%02d:%02d.%03dZ", date_time->hour, date_time->min,
-            date_time->sec, date_time->msec);
-    }
-    else
-    {
-        sprintf(time_str, "%02d:%02d:%02dZ", date_time->hour, date_time->min,
-            date_time->sec);
-    }
+    sprintf(time_str, "%02d:%02d:%02.3fZ", date_time->hour, date_time->min,
+        date_time->sec);
     return time_str;
 }
 
@@ -779,18 +652,9 @@
 
     time_str =
         (axis2_char_t *) AXIS2_MALLOC(env->allocator, sizeof(axis2_char_t) * 37);
-    if (date_time->msec)
-    {
-        sprintf(time_str, "%02d:%02d:%02d.%03d%c%02d:%02d", date_time->hour, date_time->min,
-            date_time->sec, date_time->msec, date_time->tz_pos ? '+': '-',
-            date_time->tz_hour, date_time->tz_min);
-    }
-    else
-    {
-        sprintf(time_str, "%02d:%02d:%02d%c%02d:%02d", date_time->hour, date_time->min,
-            date_time->sec, date_time->tz_pos ? '+': '-',
-            date_time->tz_hour, date_time->tz_min);
-    }
+    sprintf(time_str, "%02d:%02d:%02.3f%c%02d:%02d", date_time->hour, date_time->min,
+        date_time->sec, date_time->tz_pos ? '+': '-',
+        date_time->tz_hour, date_time->tz_min);
     return time_str;
 }
 
@@ -821,18 +685,9 @@
     AXIS2_ENV_CHECK(env, NULL);
 
     date_time_str = AXIS2_MALLOC(env->allocator, sizeof(char) * 32);
-    if (date_time->msec)
-    {
-        sprintf(date_time_str, "%d-%02d-%02dT%02d:%02d:%02d.%03dZ",
-            date_time->year + 1900, date_time->mon + 1, date_time->day,
-            date_time->hour, date_time->min, date_time->sec, date_time->msec);
-    }
-    else
-    {
-        sprintf(date_time_str, "%d-%02d-%02dT%02d:%02d:%02dZ",
-            date_time->year + 1900, date_time->mon + 1, date_time->day,
-            date_time->hour, date_time->min, date_time->sec);
-    }
+    sprintf(date_time_str, "%d-%02d-%02dT%02d:%02d:%02.3fZ",
+        date_time->year + 1900, date_time->mon + 1, date_time->day,
+        date_time->hour, date_time->min, date_time->sec);
     return date_time_str;
 }
 
@@ -851,20 +706,10 @@
     }
 
     date_time_str = AXIS2_MALLOC(env->allocator, sizeof(char) * 37);
-    if (date_time->msec)
-    {
-        sprintf(date_time_str, "%d-%02d-%02dT%02d:%02d:%02d.%03d%c%02d:%02d",
-            date_time->year + 1900, date_time->mon + 1, date_time->day,
-            date_time->hour, date_time->min, date_time->sec, date_time->msec, 
-            date_time->tz_pos ? '+': '-', date_time->tz_hour, date_time->tz_min);
-    }
-    else
-    {
-        sprintf(date_time_str, "%d-%02d-%02dT%02d:%02d:%02d%c%02d:%02d",
-            date_time->year + 1900, date_time->mon + 1, date_time->day,
-            date_time->hour, date_time->min, date_time->sec,
-            date_time->tz_pos ? '+': '-', date_time->tz_hour, date_time->tz_min);
-    }
+    sprintf(date_time_str, "%d-%02d-%02dT%02d:%02d:%02.3f%c%02d:%02d",
+        date_time->year + 1900, date_time->mon + 1, date_time->day,
+        date_time->hour, date_time->min, date_time->sec, 
+        date_time->tz_pos ? '+': '-', date_time->tz_hour, date_time->tz_min);
     return date_time_str;
 }
 
@@ -914,7 +759,7 @@
     axutil_date_time_t *date_time,
     const axutil_env_t *env)
 {
-    return (date_time->sec);
+    return (int)(date_time->sec);
 }
 
 AXIS2_EXTERN int AXIS2_CALL
@@ -922,7 +767,13 @@
     axutil_date_time_t *date_time,
     const axutil_env_t *env)
 {
-    return (date_time->msec);
+    if (date_time->sec >= 1)
+    {
+        float temp = (int)date_time->sec * 1000;
+        temp /= 1000;
+        return (int)((date_time->sec - temp) * 1000);
+    }
+    return (int)(date_time->sec * 1000);
 }
 
 AXIS2_EXTERN int AXIS2_CALL
@@ -972,8 +823,7 @@
     int day;
     int hour;
     int min;
-    int sec;
-    int msec;
+    float sec;
     int tz_hour;
     int tz_min;
     axis2_bool_t tz_pos = AXIS2_FALSE;
@@ -986,7 +836,6 @@
     hour = date_time->hour;
     min = date_time->min;
     sec = date_time->sec;
-    msec = date_time->msec;
     tz_pos = date_time->tz_pos;
     tz_hour = date_time->tz_hour;
     tz_min = date_time->tz_min;
@@ -1141,11 +990,7 @@
     {
         return NULL;
     }
-    if (sec < 0 || sec > 59)
-    {
-        return NULL;
-    }
-    if (msec < 0)
+    if (sec < 0 || sec >= 60)
     {
         return NULL;
     }
@@ -1157,7 +1002,6 @@
     ret->hour = hour;
     ret->min = min;
     ret->sec = sec;
-    ret->msec = msec;
     return ret;
 }
 
@@ -1181,7 +1025,6 @@
     date_time->hour = date_time_in->hour;
     date_time->min = date_time_in->min;
     date_time->sec = date_time_in->sec;
-    date_time->msec = date_time_in->msec;
     date_time->tz_hour = hour;
     date_time->tz_min = min;
     



---------------------------------------------------------------------
To unsubscribe, e-mail: axis-cvs-unsubscribe@ws.apache.org
For additional commands, e-mail: axis-cvs-help@ws.apache.org