summaryrefslogtreecommitdiff
path: root/src/time/strftime.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/time/strftime.c')
-rw-r--r--src/time/strftime.c16
1 files changed, 13 insertions, 3 deletions
diff --git a/src/time/strftime.c b/src/time/strftime.c
index 24000f3b..48f65320 100644
--- a/src/time/strftime.c
+++ b/src/time/strftime.c
@@ -43,6 +43,7 @@ static int week_num(const struct tm *tm)
return val;
}
+const char *__tm_to_tzname(const struct tm *);
size_t __strftime_l(char *restrict, size_t, const char *restrict, const struct tm *restrict, locale_t);
const char *__strftime_fmt_1(char (*s)[100], size_t *l, int f, const struct tm *tm, locale_t loc)
@@ -166,11 +167,20 @@ const char *__strftime_fmt_1(char (*s)[100], size_t *l, int f, const struct tm *
width = 4;
goto number;
case 'z':
- val = -tm->__tm_gmtoff;
- *l = snprintf(*s, sizeof *s, "%+.2d%.2d", val/3600, abs(val%3600)/60);
+ if (tm->tm_isdst < 0) {
+ *l = 0;
+ return "";
+ }
+ *l = snprintf(*s, sizeof *s, "%+.2d%.2d",
+ (-tm->__tm_gmtoff)/3600,
+ abs(tm->__tm_gmtoff%3600)/60);
return *s;
case 'Z':
- fmt = tm->__tm_zone;
+ if (tm->tm_isdst < 0) {
+ *l = 0;
+ return "";
+ }
+ fmt = __tm_to_tzname(tm);
goto string;
case '%':
*l = 1;