diff --git a/Data/UnixTime/Conv.hs b/Data/UnixTime/Conv.hs
--- a/Data/UnixTime/Conv.hs
+++ b/Data/UnixTime/Conv.hs
@@ -71,6 +71,7 @@
 -- This is a wrapper for strftime_l().
 -- 'utMicroSeconds' is ignored.
 -- The result depends on the TZ environment variable.
+--
 
 formatUnixTime :: Format -> UnixTime -> IO ByteString
 formatUnixTime fmt t =
diff --git a/cbits/conv.c b/cbits/conv.c
--- a/cbits/conv.c
+++ b/cbits/conv.c
@@ -50,7 +50,7 @@
     char *tz;
     tz = getenv("TZ");
 #if defined(_WIN32)
-    _patch_setenv("TZ", "", 1);
+    _patch_setenv("TZ", "UTC", 1);
 #else
     setenv("TZ", "", 1);
 #endif
diff --git a/cbits/strftime.c b/cbits/strftime.c
--- a/cbits/strftime.c
+++ b/cbits/strftime.c
@@ -522,7 +522,8 @@
 #ifdef ALTZONE
 					diff = -altzone;
 #else /* !defined ALTZONE */
-					continue;
+					// Fix the daylight saving time, see #54.
+					diff = -(_timezone - 3600 * t->tm_isdst);
 #endif /* !defined ALTZONE */
 #endif /* !defined TM_GMTOFF */
 				if (diff < 0) {
diff --git a/cbits/win_patch.c b/cbits/win_patch.c
--- a/cbits/win_patch.c
+++ b/cbits/win_patch.c
@@ -100,18 +100,26 @@
 };
 
 
-int _patch_setenv(const char *var, const char *val, int ovr) {
-    BOOL b = SetEnvironmentVariableA(var, val);
-    if (b) {
-        return 0;
-    } else {
-        return 1;
+int _patch_setenv(const char *var, const char *val, int _ovr) {
+    if (val == NULL) {
+        return _patch_unsetenv(var);
     }
+    int varlen = strlen(var);
+    int vallen = strlen(val);
+    int len = varlen + vallen + 2;
+    char *sname = (char *)malloc(len);
+    strcpy(sname, var);
+    sname[varlen] = '=';
+    strcpy(sname + varlen + 1, val);
+    sname[varlen + vallen + 1] = '\0';
+    int r = _putenv(sname);
+    free(sname);
+    return r;
 }
 
 int _patch_unsetenv(const char *name) {
-    int len = strlen(name);
-    char *sname = (char *)malloc(len + 2);
+    int len = strlen(name) + 2;
+    char *sname = (char *)malloc(len);
     strcpy(sname, name);
     sname[len] = '=';
     sname[len + 1] = '\0';
diff --git a/unix-time.cabal b/unix-time.cabal
--- a/unix-time.cabal
+++ b/unix-time.cabal
@@ -1,5 +1,5 @@
 Name:                   unix-time
-Version:                0.4.6
+Version:                0.4.7
 Author:                 Kazu Yamamoto <kazu@iij.ad.jp>
 Maintainer:             Kazu Yamamoto <kazu@iij.ad.jp>
 License:                BSD3
