Fix wrong conversion time to string 70/103070/1
authorkiso.chang <kiso.chang@samsung.com>
Wed, 7 Dec 2016 07:04:49 +0000 (16:04 +0900)
committerkiso.chang <kiso.chang@samsung.com>
Wed, 7 Dec 2016 07:06:46 +0000 (16:06 +0900)
- change date formatter : %x to %d/%m/%Y
- strftime() works wrong for am/pm

Change-Id: If50d437031063a3801e26a147f0b6523296adbbc
Signed-off-by: kiso.chang <kiso.chang@samsung.com>
src/data/system/settings_clock.c

index ddd3d22..9fb352b 100755 (executable)
@@ -8,7 +8,12 @@
 #include "common/menumgr.h"
 #include "data/system/settings_clock.h"
 
-#define MAX_DATETIME_LENGTH 35
+#include <vconf.h>
+#include <vconf-keys.h>
+#include <utils_i18n.h>
+
+
+#define MAX_DATETIME_LENGTH 55
 
 Ecore_Timer *priv_timer = NULL;
 
@@ -94,6 +99,80 @@ bool settings_clock_set_current_time(struct tm *current_time)
        return true;
 }
 
+
+#if 0
+
+/* @TODO : Current locale(Location) setting work wrong. it sould be fixed */
+
+char *_get_str_from_icu(const char *pattern)
+{
+       char *locale_tmp = vconf_get_str(VCONFKEY_REGIONFORMAT);
+       char locale[32] = {0,};
+       char *p = NULL;
+
+       if (locale_tmp && (strlen(locale_tmp) < 32))
+               strcpy(locale, locale_tmp);
+
+       if (locale[0] != '\0') {
+               p = strstr(locale, ".UTF-8");
+               if (p) {
+                       *p = 0;
+               }
+       }
+
+       char *ret_str = NULL;
+       i18n_uchar Pattern[256] = { 0, };
+       i18n_udate_format_h formatter = NULL;
+
+       i18n_uchar formatted[256] = { 0, };
+       char formattedString[256] = { 0, };
+       int32_t buf_size_needed;
+
+       i18n_ustring_copy_ua_n(Pattern, pattern, strlen(pattern));
+
+       i18n_udate date;
+       i18n_ucalendar_get_now(&date);
+       i18n_udate_create(I18N_UDATE_PATTERN, I18N_UDATE_PATTERN, locale_tmp, NULL, -1, Pattern, -1, &formatter);
+       int32_t formattedCapacity = (int32_t)(sizeof(formatted) / sizeof((formatted)[0]));
+       (void)i18n_udate_format_date(formatter, date, formatted, formattedCapacity, NULL, &buf_size_needed);
+       i18n_ustring_copy_au(formattedString, formatted);
+
+       _DBG("str from icu is %s", formattedString);
+
+       i18n_udate_destroy(formatter);
+
+       ret_str = strdup(formattedString);
+       return ret_str;
+}
+
+
+char *settings_clock_get_clock_status_str()
+{
+       bool automatic = false;
+       bool is24h = false;
+
+       if (!settings_clock_is_time_automatic(&automatic))
+               return NULL;
+
+       if (automatic) {
+               return strdup(STR_AUTO);
+       }
+
+       if (!settings_clock_is_24h_set(&is24h)) {
+               _ERR("Cannot get 24h setting");
+       }
+
+       if (is24h) {
+               _DBG("is24h is TRUE");
+               return _get_str_from_icu("dd/MM/y HH:mm");
+       } 
+
+       _DBG("is24h is FALSE");
+       return _get_str_from_icu("dd/MM/y hh:mm a");
+}
+
+
+#else
 char *settings_clock_get_clock_status_str()
 {
        bool automatic = false;
@@ -116,16 +195,29 @@ char *settings_clock_get_clock_status_str()
                        _ERR("Cannot get 24h setting");
                }
 
+#if 0
                if (is24h) {
                        strftime(str_buffer, MAX_DATETIME_LENGTH, "%x %H:%M", tm_info);
                } else {
                        strftime(str_buffer, MAX_DATETIME_LENGTH, "%x %I:%M %p", tm_info);
                }
+#else
+               if (is24h) {
+                       _DBG("is24h is TRUE");
+                       strftime(str_buffer, MAX_DATETIME_LENGTH, "%d/%m/%Y %H:%M", tm_info);
+               } else {
+                       _DBG("is24h is FALSE");
+                       strftime(str_buffer, MAX_DATETIME_LENGTH, "%d/%m/%Y %I:%M", tm_info);
+                       strcat(str_buffer, (tm_info->tm_hour>=12)? " pm":" am");
+               }
 
+#endif
                return strdup(str_buffer);
        }
 }
 
+#endif
+
 static void _system_time_setting_changed_cb(system_settings_key_e key, void *user_data)
 {
        _DBG("System setting %d changed", key);