summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--date.c14
-rwxr-xr-xt/t0006-date.sh1
2 files changed, 13 insertions, 2 deletions
diff --git a/date.c b/date.c
index 6eccbd8546..5580c40ac0 100644
--- a/date.c
+++ b/date.c
@@ -60,6 +60,12 @@ static struct tm *time_to_tm(unsigned long time, int tz)
return gmtime(&t);
}
+static struct tm *time_to_tm_local(unsigned long time)
+{
+ time_t t = time;
+ return localtime(&t);
+}
+
/*
* What value of "tz" was in effect back then at "time" in the
* local timezone?
@@ -201,7 +207,10 @@ const char *show_date(unsigned long time, int tz, const struct date_mode *mode)
return timebuf.buf;
}
- tm = time_to_tm(time, tz);
+ if (mode->local)
+ tm = time_to_tm_local(time);
+ else
+ tm = time_to_tm(time, tz);
if (!tm) {
tm = time_to_tm(0, 0);
tz = 0;
@@ -233,7 +242,8 @@ const char *show_date(unsigned long time, int tz, const struct date_mode *mode)
month_names[tm->tm_mon], tm->tm_year + 1900,
tm->tm_hour, tm->tm_min, tm->tm_sec, tz);
else if (mode->type == DATE_STRFTIME)
- strbuf_addftime(&timebuf, mode->strftime_fmt, tm, tz, "");
+ strbuf_addftime(&timebuf, mode->strftime_fmt, tm, tz,
+ mode->local ? NULL : "");
else
strbuf_addf(&timebuf, "%.3s %.3s %d %02d:%02d:%02d %d%c%+05d",
weekday_names[tm->tm_wday],
diff --git a/t/t0006-date.sh b/t/t0006-date.sh
index 4b789c00f1..8e219b7c51 100755
--- a/t/t0006-date.sh
+++ b/t/t0006-date.sh
@@ -56,6 +56,7 @@ check_show unix-local "$TIME" '1466000000'
check_show 'format:%z' "$TIME" '+0200'
check_show 'format-local:%z' "$TIME" '+0000'
check_show 'format:%Z' "$TIME" ''
+check_show 'format-local:%Z' "$TIME" 'UTC'
check_show 'format:%%z' "$TIME" '%z'
check_show 'format-local:%%z' "$TIME" '%z'