* Copyright (C) Linus Torvalds, 2005
*/
-#include <time.h>
-#include <sys/time.h>
-
#include "cache.h"
static time_t my_mktime(struct tm *tm)
return gmtime(&t);
}
-const char *show_date(unsigned long time, int tz, int relative)
+const char *show_date(unsigned long time, int tz, enum date_mode mode)
{
struct tm *tm;
static char timebuf[200];
- if (relative) {
+ if (mode == DATE_RELATIVE) {
unsigned long diff;
- time_t t = gm_time_t(time, tz);
struct timeval now;
gettimeofday(&now, NULL);
- if (now.tv_sec < t)
+ if (now.tv_sec < time)
return "in the future";
- diff = now.tv_sec - t;
+ diff = now.tv_sec - time;
if (diff < 90) {
snprintf(timebuf, sizeof(timebuf), "%lu seconds ago", diff);
return timebuf;
tm = time_to_tm(time, tz);
if (!tm)
return NULL;
- sprintf(timebuf, "%.3s %.3s %d %02d:%02d:%02d %d %+05d",
- weekday_names[tm->tm_wday],
- month_names[tm->tm_mon],
- tm->tm_mday,
- tm->tm_hour, tm->tm_min, tm->tm_sec,
- tm->tm_year + 1900, tz);
+ if (mode == DATE_SHORT)
+ sprintf(timebuf, "%04d-%02d-%02d", tm->tm_year + 1900,
+ tm->tm_mon + 1, tm->tm_mday);
+ else
+ sprintf(timebuf, "%.3s %.3s %d %02d:%02d:%02d %d %+05d",
+ weekday_names[tm->tm_wday],
+ month_names[tm->tm_mon],
+ tm->tm_mday,
+ tm->tm_hour, tm->tm_min, tm->tm_sec,
+ tm->tm_year + 1900, tz);
return timebuf;
}
}
if (match_string(date, "PM") == 2) {
- if (tm->tm_hour > 0 && tm->tm_hour < 12)
- tm->tm_hour += 12;
+ tm->tm_hour = (tm->tm_hour % 12) + 12;
+ return 2;
+ }
+
+ if (match_string(date, "AM") == 2) {
+ tm->tm_hour = (tm->tm_hour % 12) + 0;
return 2;
}
static void date_pm(struct tm *tm, int *num)
{
- int hour = *num;
+ int hour, n = *num;
*num = 0;
- if (hour > 0 && hour < 12) {
- tm->tm_hour = hour;
+ hour = tm->tm_hour;
+ if (n) {
+ hour = n;
tm->tm_min = 0;
tm->tm_sec = 0;
}
- if (tm->tm_hour > 0 && tm->tm_hour < 12)
- tm->tm_hour += 12;
+ tm->tm_hour = (hour % 12) + 12;
}
static void date_am(struct tm *tm, int *num)
{
- int hour = *num;
+ int hour, n = *num;
*num = 0;
- if (hour > 0 && hour < 12) {
- tm->tm_hour = hour;
+ hour = tm->tm_hour;
+ if (n) {
+ hour = n;
tm->tm_min = 0;
tm->tm_sec = 0;
}
+ tm->tm_hour = (hour % 12);
}
static const struct special {