diff --git a/lib/utils.py b/lib/utils.py
index beee428357d0bffa2c903546a19aa7a50d59dd83..479e267caab585164156b1e835ebb1a4eec9d476 100644
--- a/lib/utils.py
+++ b/lib/utils.py
@@ -1161,6 +1161,34 @@ def CheckVolumeGroupSize(vglist, vgname, minsize):
   return None
 
 
+def SplitTime(seconds):
+  """Splits time as floating point number into a tuple.
+
+  @param seconds: Time in seconds
+  @type seconds: int or float
+  @return: Tuple containing (seconds, milliseconds)
+
+  """
+  (seconds, fraction) = divmod(seconds, 1.0)
+  return (int(seconds), int(round(fraction * 1000, 0)))
+
+
+def MergeTime(timetuple):
+  """Merges a tuple into time as a floating point number.
+
+  @param timetuple: Time as tuple, (seconds, milliseconds)
+  @type timetuple: tuple
+  @return: Time as a floating point number expressed in seconds
+
+  """
+  (seconds, milliseconds) = timetuple
+
+  assert 0 <= seconds, "Seconds must be larger than 0"
+  assert 0 <= milliseconds <= 999, "Milliseconds must be 0-999"
+
+  return float(seconds) + (float(1) / 1000 * milliseconds)
+
+
 def LockedMethod(fn):
   """Synchronized object access decorator.
 
diff --git a/test/ganeti.utils_unittest.py b/test/ganeti.utils_unittest.py
index c1e3531e515910de329ff658b0780732fdbdb5c8..9ebcebc5233e33d3743b8dcd8d4a9702460cd4b9 100755
--- a/test/ganeti.utils_unittest.py
+++ b/test/ganeti.utils_unittest.py
@@ -778,5 +778,27 @@ class TestFileLock(unittest.TestCase):
     self.assertRaises(AssertionError, self.lock.Unlock, blocking=False)
 
 
+class TestTimeFunctions(unittest.TestCase):
+  """Test case for time functions"""
+
+  def runTest(self):
+    self.assertEqual(utils.SplitTime(1), (1, 0))
+    self.assertEqual(utils.SplitTime(1.5), (1, 500))
+    self.assertEqual(utils.SplitTime(1218448917.4809151), (1218448917, 481))
+
+    self.assertEqual(utils.MergeTime((1, 0)), 1.0)
+    self.assertEqual(utils.MergeTime((1, 500)), 1.5)
+    self.assertEqual(utils.MergeTime((1218448917, 500)), 1218448917.5)
+
+    self.assertEqual(round(utils.MergeTime((1218448917, 481)), 3), 1218448917.481)
+    self.assertEqual(round(utils.MergeTime((1, 801)), 3), 1.801)
+
+    self.assertRaises(AssertionError, utils.MergeTime, (0, -1))
+    self.assertRaises(AssertionError, utils.MergeTime, (0, 1000))
+    self.assertRaises(AssertionError, utils.MergeTime, (0, 9999))
+    self.assertRaises(AssertionError, utils.MergeTime, (-1, 0))
+    self.assertRaises(AssertionError, utils.MergeTime, (-9999, 0))
+
+
 if __name__ == '__main__':
   unittest.main()