diff options
-rw-r--r-- | win32/mingw.c | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/win32/mingw.c b/win32/mingw.c index 876b74221..211c378a3 100644 --- a/win32/mingw.c +++ b/win32/mingw.c | |||
@@ -862,6 +862,33 @@ size_t mingw_strftime(char *buf, size_t max, const char *format, const struct tm | |||
862 | t = newfmt + m + 1; | 862 | t = newfmt + m + 1; |
863 | fmt = newfmt; | 863 | fmt = newfmt; |
864 | } | 864 | } |
865 | else if ( t[1] == 'z' ) { | ||
866 | char buffer[16] = ""; | ||
867 | |||
868 | *t = '\0'; | ||
869 | m = t - fmt; | ||
870 | _tzset(); | ||
871 | if ( tm->tm_isdst >= 0 ) { | ||
872 | int offset = (int)_timezone - (tm->tm_isdst > 0 ? 3600 : 0); | ||
873 | int hr, min; | ||
874 | |||
875 | if ( offset > 0 ) { | ||
876 | buffer[0] = '-'; | ||
877 | } | ||
878 | else { | ||
879 | buffer[0] = '+'; | ||
880 | offset = -offset; | ||
881 | } | ||
882 | |||
883 | hr = offset / 3600; | ||
884 | min = (offset % 3600) / 60; | ||
885 | sprintf(buffer+1, "%02d%02d", hr, min); | ||
886 | } | ||
887 | newfmt = xasprintf("%s%s%s", fmt, buffer, t+2); | ||
888 | free(fmt); | ||
889 | t = newfmt + m + 1; | ||
890 | fmt = newfmt; | ||
891 | } | ||
865 | else if ( t[1] != '\0' ) { | 892 | else if ( t[1] != '\0' ) { |
866 | ++t; | 893 | ++t; |
867 | } | 894 | } |