From 13de71fb1ef7bcfc026537060a1546f44538e096 Mon Sep 17 00:00:00 2001 From: "kiso.chang" Date: Wed, 7 Dec 2016 16:04:49 +0900 Subject: [PATCH] Fix wrong conversion time to string - change date formatter : %x to %d/%m/%Y - strftime() works wrong for am/pm Change-Id: If50d437031063a3801e26a147f0b6523296adbbc Signed-off-by: kiso.chang --- src/data/system/settings_clock.c | 94 +++++++++++++++++++++++++++++++++++++++- 1 file changed, 93 insertions(+), 1 deletion(-) diff --git a/src/data/system/settings_clock.c b/src/data/system/settings_clock.c index ddd3d22..9fb352b 100755 --- a/src/data/system/settings_clock.c +++ b/src/data/system/settings_clock.c @@ -8,7 +8,12 @@ #include "common/menumgr.h" #include "data/system/settings_clock.h" -#define MAX_DATETIME_LENGTH 35 +#include +#include +#include + + +#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); -- 2.7.4