diff --git a/Lib/logging/handlers.py b/Lib/logging/handlers.py
index 296237b..31352ad 100644
--- a/Lib/logging/handlers.py
+++ b/Lib/logging/handlers.py
@@ -172,7 +172,6 @@
         #
         # Case of the 'when' specifier is not important; lower or upper case
         # will work.
-        currentTime = int(time.time())
         if self.when == 'S':
             self.interval = 1 # one second
             self.suffix = "%Y-%m-%d_%H-%M-%S"
@@ -203,8 +202,13 @@
 
         self.extMatch = re.compile(self.extMatch, re.ASCII)
         self.interval = self.interval * interval # multiply by units requested
-        self.rolloverAt = currentTime + self.interval
+        self.rolloverAt = self.computeRollover(int(time.time()))
 
+    def computeRollover(self, currentTime):
+        """
+        Work out the rollover time based on the specified time.
+        """
+        result = currentTime + self.interval
         # If we are rolling over at midnight or weekly, then the interval is already known.
         # What we need to figure out is WHEN the next interval is.  In other words,
         # if you are rolling over at midnight, then your base interval is 1 day,
@@ -214,7 +218,7 @@
         # the rest.  Note that this code doesn't care about leap seconds. :)
         if self.when == 'MIDNIGHT' or self.when.startswith('W'):
             # This could be done with less code, but I wanted it to be clear
-            if utc:
+            if self.utc:
                 t = time.gmtime(currentTime)
             else:
                 t = time.localtime(currentTime)
@@ -224,7 +228,7 @@
             # r is the number of seconds left between now and midnight
             r = _MIDNIGHT - ((currentHour * 60 + currentMinute) * 60 +
                     currentSecond)
-            self.rolloverAt = currentTime + r
+            result = currentTime + r
             # If we are rolling over on a certain day, add in the number of days until
             # the next rollover, but offset by 1 since we just calculated the time
             # until the next day starts.  There are three cases:
@@ -240,15 +244,15 @@
             # The calculations described in 2) and 3) above need to have a day added.
             # This is because the above time calculation takes us to midnight on this
             # day, i.e. the start of the next day.
-            if when.startswith('W'):
+            if self.when.startswith('W'):
                 day = t[6] # 0 is Monday
                 if day != self.dayOfWeek:
                     if day < self.dayOfWeek:
                         daysToWait = self.dayOfWeek - day
                     else:
                         daysToWait = 6 - day + self.dayOfWeek + 1
-                    newRolloverAt = self.rolloverAt + (daysToWait * (60 * 60 * 24))
-                    if not utc:
+                    newRolloverAt = result + (daysToWait * (60 * 60 * 24))
+                    if not self.utc:
                         dstNow = t[-1]
                         dstAtRollover = time.localtime(newRolloverAt)[-1]
                         if dstNow != dstAtRollover:
@@ -256,9 +260,8 @@
                                 newRolloverAt = newRolloverAt - 3600
                             else:           # DST bows out before next rollover, so we need to add an hour
                                 newRolloverAt = newRolloverAt + 3600
-                    self.rolloverAt = newRolloverAt
-
-        #print "Will rollover at %d, %d seconds from now" % (self.rolloverAt, self.rolloverAt - currentTime)
+                    result = newRolloverAt
+        return result
 
     def shouldRollover(self, record):
         """
@@ -327,8 +330,8 @@
         #print "%s -> %s" % (self.baseFilename, dfn)
         self.mode = 'w'
         self.stream = self._open()
-        newRolloverAt = self.rolloverAt + self.interval
         currentTime = int(time.time())
+        newRolloverAt = self.computeRollover(currentTime)
         while newRolloverAt <= currentTime:
             newRolloverAt = newRolloverAt + self.interval
         #If DST changes and midnight or weekly rollover, adjust for this.
diff --git a/Misc/NEWS b/Misc/NEWS
index a7a0e5c..eeb6328 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -24,6 +24,9 @@
 Library
 -------
 
+- Issue #5262: Fixed bug in next rollover time computation in
+  TimedRotatingFileHandler.
+
 - Issue #6217: The C implementation of io.TextIOWrapper didn't include the
   errors property.  Additionally, the errors and encoding properties of StringIO
   are always None now.
@@ -347,7 +350,7 @@
 - Issue #5150: IDLE's format menu now has an option to strip trailing
   whitespace.
 
-- Issue #5940: distutils.command.build_clib.check_library_list was not doing 
+- Issue #5940: distutils.command.build_clib.check_library_list was not doing
   the right type checkings anymore.
 
 - Issue #4875: On win32, ctypes.util.find_library does no longer
@@ -783,7 +786,7 @@
 
 - Issue #6048: Now Distutils uses the tarfile module in archive_util.
 
-- Issue #6062: In distutils, fixed the package option of build_ext. Feedback 
+- Issue #6062: In distutils, fixed the package option of build_ext. Feedback
   and tests on pywin32 by Tim Golden.
 
 - Issue #6053: Fixed distutils tests on win32. patch by Hirokazu Yamamoto.
@@ -791,7 +794,7 @@
 - Issue #6046: Fixed the library extension when distutils build_ext is used
   inplace. Initial patch by Roumen Petrov.
 
-- Issue #6041: Now distutils `sdist` and `register` commands use `check` as a 
+- Issue #6041: Now distutils `sdist` and `register` commands use `check` as a
   subcommand.
 
 - Issue #6022: a test file was created in the current working directory by
@@ -812,7 +815,7 @@
 
 - Issue #2245: aifc now skips chunk types it doesn't recognize, per spec.
 
-- Issue #5874: distutils.tests.test_config_cmd is not locale-sensitive 
+- Issue #5874: distutils.tests.test_config_cmd is not locale-sensitive
   anymore.
 
 - Issue #5810: Fixed Distutils test_build_scripts so it uses
@@ -1221,7 +1224,7 @@
   linker, rather than always exit successfully. Patch by Floris Bruynooghe.
 
 - Issue #4587: Add configure option --with-dbmliborder=db1:db2:... to specify
-  the order that backends for the dbm extension are checked. 
+  the order that backends for the dbm extension are checked.
 
 - Link the shared python library with $(MODLIBS).
 
