diff --git a/src/Ganeti/Utils.hs b/src/Ganeti/Utils.hs
index 8a73023f29f50d9c7b238016bff7a181a97d7270..d9ea3b55ca68452930ef441af4bf4df3230a245a 100644
--- a/src/Ganeti/Utils.hs
+++ b/src/Ganeti/Utils.hs
@@ -45,6 +45,7 @@ module Ganeti.Utils
   , exitUnless
   , rStripSpace
   , newUUID
+  , clockTimeToString
   ) where
 
 import Data.Char (toUpper, isAlphaNum, isDigit, isSpace)
@@ -57,6 +58,7 @@ import Ganeti.BasicTypes
 import qualified Ganeti.Constants as C
 import System.IO
 import System.Exit
+import System.Time
 
 -- * Debug functions
 
@@ -286,3 +288,7 @@ newUUID :: IO String
 newUUID = do
   contents <- readFile C.randomUuidFile
   return $! rStripSpace $ take 128 contents
+
+-- | Convert a ClockTime into a (seconds-only) timestamp.
+clockTimeToString :: ClockTime -> String
+clockTimeToString (TOD t _) = show t
diff --git a/test/hs/Test/Ganeti/Utils.hs b/test/hs/Test/Ganeti/Utils.hs
index a84b30ff540ce38945c6da1fdb955fb50206f8c0..26d0b91cf991a8512abc612d8425d4cfda14cd40 100644
--- a/test/hs/Test/Ganeti/Utils.hs
+++ b/test/hs/Test/Ganeti/Utils.hs
@@ -33,6 +33,7 @@ import Test.HUnit
 
 import Data.Char (isSpace)
 import Data.List
+import System.Time
 import qualified Text.JSON as J
 #ifndef NO_REGEX_PCRE
 import Text.Regex.PCRE
@@ -233,6 +234,10 @@ case_new_uuid = do
   assertBool "newUUID" $ uuid =~ C.uuidRegex
 #endif
 
+prop_clockTimeToString :: Integer -> Integer -> Property
+prop_clockTimeToString ts pico =
+  clockTimeToString (TOD ts pico) ==? show ts
+
 -- | Test list for the Utils module.
 testSuite "Utils"
             [ 'prop_commaJoinSplit
@@ -252,4 +257,5 @@ testSuite "Utils"
 #ifndef NO_REGEX_PCRE
             , 'case_new_uuid
 #endif
+            , 'prop_clockTimeToString
             ]