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/10 22:24:51 UTC

svn commit: r635698 - in /webservices/axis2/trunk/c/util: include/axutil_date_time.h src/date_time.c

Author: senaka
Date: Mon Mar 10 14:24:48 2008
New Revision: 635698

URL: http://svn.apache.org/viewvc?rev=635698&view=rev
Log:
Fixing AXIS2C-1049

Modified:
    webservices/axis2/trunk/c/util/include/axutil_date_time.h
    webservices/axis2/trunk/c/util/src/date_time.c

Modified: webservices/axis2/trunk/c/util/include/axutil_date_time.h
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/c/util/include/axutil_date_time.h?rev=635698&r1=635697&r2=635698&view=diff
==============================================================================
--- webservices/axis2/trunk/c/util/include/axutil_date_time.h (original)
+++ webservices/axis2/trunk/c/util/include/axutil_date_time.h Mon Mar 10 14:24:48 2008
@@ -264,11 +264,58 @@
      * @return NOT_EXPIRED/EXPIRED/EQUAL if valid otherwise return FAILURE
      */
     AXIS2_EXTERN axutil_date_time_comp_result_t AXIS2_CALL
-
     axutil_date_time_compare(
         axutil_date_time_t * date_time,
         const axutil_env_t * env,
         axutil_date_time_t * ref);
+
+    AXIS2_EXTERN axutil_date_time_t *AXIS2_CALL
+    axutil_date_time_utc_to_local(
+        axutil_date_time_t * date_time_in,
+        const axutil_env_t * env,
+        axis2_bool_t is_positive,
+        int hour,
+        int min);
+
+    AXIS2_EXTERN axutil_date_time_t *AXIS2_CALL
+    axutil_date_time_local_to_utc(
+        axutil_date_time_t * date_time_in,
+        const axutil_env_t * env);
+
+    AXIS2_EXTERN int AXIS2_CALL
+    axutil_date_time_get_time_zone_hour(
+        axutil_date_time_t * date_time,
+        const axutil_env_t * env);
+
+    AXIS2_EXTERN int AXIS2_CALL
+    axutil_date_time_get_time_zone_minute(
+        axutil_date_time_t * date_time,
+        const axutil_env_t * env);
+
+    AXIS2_EXTERN axis2_bool_t AXIS2_CALL
+    axutil_date_time_is_time_zone_positive(
+        axutil_date_time_t * date_time,
+        const axutil_env_t * env);
+
+    AXIS2_EXTERN axis2_status_t AXIS2_CALL
+    axutil_date_time_set_time_zone(
+        axutil_date_time_t * date_time,
+        const axutil_env_t * env,
+        axis2_bool_t is_positive,
+        int hour,
+        int min);
+
+    AXIS2_EXTERN axis2_status_t AXIS2_CALL
+    axutil_date_time_deserialize_date_time_with_time_zone(
+        axutil_date_time_t * date_time,
+        const axutil_env_t * env,
+        const axis2_char_t * date_time_str);
+
+    AXIS2_EXTERN axis2_status_t AXIS2_CALL
+    axutil_date_time_deserialize_time_with_time_zone(
+        axutil_date_time_t * date_time,
+        const axutil_env_t * env,
+        const axis2_char_t * time_str);
 
 #ifdef __cplusplus
 }

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=635698&r1=635697&r2=635698&view=diff
==============================================================================
--- webservices/axis2/trunk/c/util/src/date_time.c (original)
+++ webservices/axis2/trunk/c/util/src/date_time.c Mon Mar 10 14:24:48 2008
@@ -72,7 +72,7 @@
     date_time->msec = axutil_get_milliseconds(env);
     date_time->tz_hour = 0;
     date_time->tz_min = 0;
-    date_time->tz_pos = AXIS2_FALSE;
+    date_time->tz_pos = AXIS2_TRUE;
 
     return date_time;
 }
@@ -145,7 +145,7 @@
     int min;
     int sec;
     int msec;
-    axis2_bool_t tz_pos = AXIS2_FALSE;;
+    axis2_bool_t tz_pos = AXIS2_TRUE;;
     int tz_hour;
     int tz_min;
     AXIS2_ENV_CHECK(env, AXIS2_FAILURE);
@@ -154,9 +154,9 @@
     {
         return AXIS2_FAILURE;
     }
-    else if (strchr(time_str, '+'))
+    else if (!strchr(time_str, '+'))
     {
-        tz_pos = AXIS2_TRUE;
+        tz_pos = AXIS2_FALSE;
     }
 
     if (tz_pos)
@@ -543,6 +543,33 @@
 }
 
 AXIS2_EXTERN axis2_status_t AXIS2_CALL
+axutil_date_time_set_time_zone(
+    axutil_date_time_t * date_time,
+    const axutil_env_t * env,
+    axis2_bool_t is_positive,
+    int hour,
+    int min)
+{
+    AXIS2_ENV_CHECK(env, AXIS2_FAILURE);
+    if (hour < 0 || hour > 14)
+    {
+        return AXIS2_FAILURE;
+    }
+    if (min < 0 || min > 59)
+    {
+        return AXIS2_FAILURE;
+    }
+    if (hour == 14 && min != 0)
+    {
+        return AXIS2_FAILURE;
+    }
+    date_time->tz_pos = is_positive;
+    date_time->tz_hour = hour;
+    date_time->tz_min = min;
+    return AXIS2_SUCCESS;
+}
+
+AXIS2_EXTERN axis2_status_t AXIS2_CALL
 axutil_date_time_set_date_time(
     axutil_date_time_t * date_time,
     const axutil_env_t * env,
@@ -715,4 +742,243 @@
     const axutil_env_t * env)
 {
     return (date_time->msec);
+}
+
+AXIS2_EXTERN int AXIS2_CALL
+axutil_date_time_get_time_zone_hour(
+    axutil_date_time_t * date_time,
+    const axutil_env_t * env)
+{
+    return (date_time->tz_hour);
+}
+
+AXIS2_EXTERN int AXIS2_CALL
+axutil_date_time_get_time_zone_minute(
+    axutil_date_time_t * date_time,
+    const axutil_env_t * env)
+{
+    return (date_time->tz_min);
+}
+
+AXIS2_EXTERN int AXIS2_CALL
+axutil_date_time_is_time_zone_positive(
+    axutil_date_time_t * date_time,
+    const axutil_env_t * env)
+{
+    return (date_time->tz_pos);
+}
+
+AXIS2_EXTERN axutil_date_time_t *AXIS2_CALL
+axutil_date_time_local_to_utc(
+    axutil_date_time_t * date_time,
+    const axutil_env_t * env)
+{
+    int year;
+    int mon;
+    int day;
+    int hour;
+    int min;
+    int sec;
+    int msec;
+    axis2_bool_t tz_pos = AXIS2_FALSE;;
+    int tz_hour;
+    int tz_min;
+    axutil_date_time_t *ret = NULL;
+
+    year = date_time->year;
+    mon = date_time->mon;
+    day = date_time->day;
+    hour = date_time->hour;
+    min = date_time->min;
+    sec = date_time->msec;
+    tz_pos = date_time->tz_pos;
+    tz_hour = date_time->tz_hour;
+    tz_min = date_time->tz_min;
+
+    if (!tz_pos)
+    {
+        tz_hour *= -1;
+    }
+    hour += tz_hour;
+    if (!tz_pos)
+    {
+        tz_min *= -1;
+    }
+    min += tz_min;
+
+    if (min > 59)
+    {
+        hour += min / 60;
+        min %= 60;
+    }
+    while (min < 0)
+    {
+        hour--;
+        min += 60;
+    }
+
+    if (hour > 23)
+    {
+        day += hour / 24;
+        hour %= 24;
+    }
+    while (hour < 0)
+    {
+        day--;
+        hour += 24;
+    }
+
+    mon--;
+    while (mon < 0)
+    {
+        mon += 12;
+        year--;
+    }
+    while (mon > 11)
+    {
+        mon -= 12;
+        year++;
+    }
+    mon++;
+
+    day--;
+    while (day > 30)
+    {
+        mon++;
+        if (mon == 2)
+        {
+            day -= 28;
+            if (year % 4 != 0 || year % 400 == 0)
+            {
+                day--;
+            }
+        }
+        if (mon == 4 || mon == 6 ||
+            mon == 9 || mon == 11)
+        {
+            day -= 30;
+        }
+        else
+        {
+            day -= 31;
+        }
+        if (mon > 12)
+        {
+            mon = 1;
+            year++;
+        }
+    }
+    while (day < 0)
+    {
+        mon--;
+        if (mon == 3)
+        {
+            day += 28;
+            if (year % 4 != 0 || year % 400 == 0)
+            {
+                day++;
+            }
+        }
+        if (mon == 5 || mon == 7 ||
+            mon == 10 || mon == 12)
+        {
+            day += 30;
+        }
+        else
+        {
+            day += 31;
+        }
+        if (mon < 1)
+        {
+            mon = 12;
+            year--;
+        }
+    }
+    day++;
+
+    if (mon < 1 || mon > 12)
+    {
+        return NULL;
+    }
+    if (day < 1 || day > 31)
+    {
+        return NULL;
+    }
+    if (day == 31 && (mon == 2 || mon == 4 ||
+        mon == 6 || mon == 9 || mon == 11))
+    {
+        return NULL;
+    }
+    if (day == 30 && mon == 2)
+    {
+        return NULL;
+    }
+    if (day == 29 && mon == 2)
+    {
+        if (year % 4 != 0 || year % 400 == 0)
+        {
+            return NULL;
+        }
+    }
+    if (hour < 0 || hour > 23)
+    {
+        return NULL;
+    }
+    if (min < 0 || min > 59)
+    {
+        return NULL;
+    }
+    if (sec < 0 || sec > 59)
+    {
+        return NULL;
+    }
+    if (msec < 0)
+    {
+        return NULL;
+    }
+
+    ret = axutil_date_time_create(env);
+    ret->year = year - 1900;
+    ret->mon = mon - 1;
+    ret->day = day;
+    ret->hour = hour;
+    ret->min = min;
+    ret->sec = sec;
+    ret->msec = msec;
+    return ret;
+}
+
+AXIS2_EXTERN axutil_date_time_t *AXIS2_CALL
+axutil_date_time_utc_to_local(
+    axutil_date_time_t * date_time_in,
+    const axutil_env_t * env,
+    axis2_bool_t is_positive,
+    int hour,
+    int min)
+{
+    axutil_date_time_t * date_time = NULL;
+    if (date_time_in->tz_hour && date_time_in->tz_min)
+    {
+        return NULL;
+    }
+    date_time->year = date_time_in->year;
+    date_time->mon = date_time_in->mon;
+    date_time->day = date_time_in->day;
+    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;
+    
+    date_time->tz_pos = is_positive ? AXIS2_FALSE : AXIS2_TRUE;
+    axutil_date_time_t *ret = 
+        axutil_date_time_local_to_utc(date_time, env);
+    ret->tz_hour = hour;
+    ret->tz_min = min;
+    
+    ret->tz_pos = is_positive;
+
+    axutil_date_time_free(date_time, env);
+    return ret;
 }



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