size_t wc_strftime(char *s, size_t max, const char *format, const struct tm *tm)
{
#ifdef ENABLE_NLS
- return strftime_l(s, max, format, tm, wc_locales[WC->selected_language]);
+ if (wc_locales[WC->selected_language] == NULL) {
+ return strftime(s, max, format, tm);
+ }
+ else { // TODO: this gives empty strings on debian.
+ return strftime_l(s, max, format, tm, wc_locales[WC->selected_language]);
+ }
#else
return strftime(s, max, format, tm);
#endif
* \param thetime time to convert to string
* \param brief do we want compact view?????
*/
-void fmt_date(char *buf, time_t thetime, int brief)
+void webcit_fmt_date(char *buf, time_t thetime, int brief)
{
struct tm tm;
struct tm today_tm;
time_t today_timet;
- int hour;
- char calhourformat[16];
-
- get_preference("calhourformat", calhourformat, sizeof calhourformat);
-
+ int time_format;
+
+ time_format = get_time_format_cached ();
today_timet = time(NULL);
localtime_r(&today_timet, &today_tm);
localtime_r(&thetime, &tm);
- hour = tm.tm_hour;
- if (hour == 0)
- hour = 12;
- else if (hour > 12)
- hour = hour - 12;
-
- buf[0] = 0;
if (brief) {
if ((tm.tm_year == today_tm.tm_year)
&&(tm.tm_mon == today_tm.tm_mon)
&&(tm.tm_mday == today_tm.tm_mday)) {
- wc_strftime(buf, 32, "%l:%M%p", &tm);
+ if (time_format == WC_TIMEFORMAT_24)
+ wc_strftime(buf, 32, "%k:%M", &tm);
+ else
+ wc_strftime(buf, 32, "%l:%M%p", &tm);
}
- /** Otherwise, for messages up to 6 months old, show the
- * month and day, and the time */
+ /** Otherwise, for messages up to 6 months old, show the month and day, and the time */
else if (today_timet - thetime < 15552000) {
- wc_strftime(buf, 32, "%b %d %l:%M%p", &tm);
+ if (time_format == WC_TIMEFORMAT_24)
+ wc_strftime(buf, 32, "%b %d %k:%M", &tm);
+ else
+ wc_strftime(buf, 32, "%b %d %l:%M%p", &tm);
}
/** older than 6 months, show only the date */
else {
}
}
else {
- wc_strftime(buf, 32, "%c", &tm);
+ if (time_format == WC_TIMEFORMAT_24)
+ wc_strftime(buf, 32, "%a %b %d %Y %T %Z", &tm);
+ else
+ wc_strftime(buf, 32, "%a %b %d %Y %r %Z", &tm);
}
}
+/**
+ * \brief learn the users timeformat preference.
+ */
+int get_time_format_cached (void)
+{
+ char calhourformat[16];
+ int *time_format_cache;
+ time_format_cache = &(WC->time_format_cache);
+ if (*time_format_cache == WC_TIMEFORMAT_NONE)
+ {
+ get_preference("calhourformat", calhourformat, sizeof calhourformat);
+ if (!strcasecmp(calhourformat, "24"))
+ *time_format_cache = WC_TIMEFORMAT_24;
+ else
+ *time_format_cache = WC_TIMEFORMAT_AMPM;
+ }
+ return *time_format_cache;
+}
+
/**
* \brief Format TIME ONLY for output
* \param buf the output buffer
{
struct tm *tm;
int hour;
- char calhourformat[16];
-
- get_preference("calhourformat", calhourformat, sizeof calhourformat);
-
+ int time_format;
+
+ time_format = get_time_format_cached ();
buf[0] = 0;
tm = localtime(&thetime);
hour = tm->tm_hour;
else if (hour > 12)
hour = hour - 12;
- if (!strcasecmp(calhourformat, "24")) {
+ if (time_format == WC_TIMEFORMAT_24) {
sprintf(buf, "%2d:%02d",
tm->tm_hour, tm->tm_min
);