return false;
}
+int _get_dst_savings(char *tzid)
+{
+ UChar utf16_timezone[CAL_STR_SHORT_LEN64] = {0};
+ u_uastrncpy(utf16_timezone, tzid, sizeof(utf16_timezone));
+
+ UErrorCode status = U_ZERO_ERROR;
+
+ return ucal_getDSTSavings(utf16_timezone, &status);
+}
+
+bool cal_time_is_dst_savings(void)
+{
+ char buf[128] = {0};
+ ssize_t len = readlink("/opt/etc/localtime", buf, sizeof(buf) -1);
+
+ char *timezone = buf + 20; /* /usr/share/zoneinfo/ */
+ return _get_dst_savings(timezone) == 0 ? false : true;
+}
+
int ret = 0;
char query[CAL_DB_SQL_MAX_LEN] = {0};
struct tm st = {0};
- tzset();
- localtime_r(¤t, &st);
- time_t mod_current = timegm(&st);
snprintf(query, sizeof(query), "SELECT %s FROM %s "
- "WHERE event_id=%d AND strftime('%%s', %s)>%ld ORDER BY %s LIMIT 1",
- field, CAL_TABLE_LOCALTIME_INSTANCE, event_id, field, mod_current, field);
+ "WHERE event_id=%d AND (strftime('%%s', %s) - %ld > 0) ORDER BY %s LIMIT 1",
+ field, CAL_TABLE_LOCALTIME_INSTANCE, event_id, field, current, field);
sqlite3_stmt *stmt = NULL;
ret = cal_db_util_query_prepare(query, &stmt);
st.tm_hour = h;
st.tm_min = n;
st.tm_sec = s;
+ st.tm_isdst = cal_time_is_dst_savings();
return (long long int)mktime(&st);
}
int ret = 0;
char query[CAL_DB_SQL_MAX_LEN] = {0};
struct tm st = {0};
- tzset();
- localtime_r(¤t, &st);
- time_t mod_current = timegm(&st);
snprintf(query, sizeof(query), "SELECT %s FROM %s "
- "WHERE id=%d AND strftime('%%s', %s)>%ld ORDER BY %s LIMIT 1",
- field, CAL_TABLE_SCHEDULE, event_id, field, mod_current, field);
+ "WHERE id=%d AND (strftime('%%s', %s) - %ld > 0) ORDER BY %s LIMIT 1",
+ field, CAL_TABLE_SCHEDULE, event_id, field, current, field);
sqlite3_stmt *stmt = NULL;
ret = cal_db_util_query_prepare(query, &stmt);
st.tm_hour = h;
st.tm_min = n;
st.tm_sec = s;
+ st.tm_isdst = cal_time_is_dst_savings();
return (long long int)mktime(&st);
}
st.tm_hour = h;
st.tm_min = n;
st.tm_sec = s;
+ st.tm_isdst = cal_time_is_dst_savings();
*tt_alert = mktime(&st);
DBG("datetime[%s] to %02d:%02d:%02d (%ld)", datetime, h, n, s, *tt_alert);
}
}
break;
}
+ *tt_alert = utime - (tick * unit);
+
DBG("alert_time(%ld) = utime(%lld) - (tick(%d) * unit(%d))", *tt_alert, utime, tick, unit);
- *tt_alert = utime - (tick * unit);
return CALENDAR_ERROR_NONE;
}
st.tm_hour = h;
st.tm_min = n;
st.tm_sec = s;
+ st.tm_isdst = cal_time_is_dst_savings();
ad->alert_utime = (long long int)mktime(&st);
if (false == get_all) break;
}
st.tm_hour = h;
st.tm_min = n;
st.tm_sec = s;
+ st.tm_isdst = cal_time_is_dst_savings();
ad->alert_utime = (long long int)mktime(&st) - (ad->tick * ad->unit);
if (false == get_all) break;
}
st.tm_hour = h;
st.tm_min = n;
st.tm_sec = s;
+ st.tm_isdst = cal_time_is_dst_savings();
ad->alert_utime = (long long int)mktime(&st) - (ad->tick * ad->unit);
if (false == get_all) break;
}