Secondes et millisecondes depuis quand? Vraisemblablement, il y a une époque (le temps zéro) qui se cache quelque part ici. Vous soustrayez l'époque de l'UTCTime pour obtenir un NominalDiffTime, puis extrayez les secondes et les millisecondes de cette valeur.
secondsSince :: UTCTime -> UTCTime -> (Integer, Int)
secondsSince t0 t1 = (i, round $ d * 1000)
where (i, d) = properFraction $ diffUTCTime t1 t0
Bien sûr, vous voudrez probablement t0 être 1/1/1970 (l'époque Unix), auquel cas vous importez Data.Time.Clock.POSIX et utilisez utcTimeToPOSIXSeconds, qui retourne un NominalDiffTime.
NominalDiffTime est une instance de (entre autres) Fractional et Num, vous avez donc accès à tous les opérateurs numériques habituels lors de leur manipulation. D'un point de vue arithmétique (y compris les conversions), il est traité comme un nombre de secondes. Lorsque vous utilisez ceci, gardez à l'esprit qu'Unix obtient un temps fondamentalement erroné car il n'a pas de place pour les secondes intercalaires. Il y a une journée avec 86401 secondes au lieu des 86400 habituelles. Dans les années 70, l'idée d'un ordinateur ayant besoin de savoir cela aurait paru absurde (les horloges étaient généralement réglées par le sysadmin consultant sa montre mécanique). Unix time_t compte simplement les secondes depuis l'époque et suppose que chaque jour a exactement 86400 secondes. NominalDiffTime est "nominal" car il fait la même supposition. La bonne chose aurait été de faire de time_t une structure avec un nombre de jours et des secondes depuis minuit comme des champs séparés, et avoir les fonctions arithmétiques de temps consulter une table de secondes intercalaires. Cependant, cela aurait son propre ensemble d'inconvénients, car de nouvelles secondes intercalaires sont désignées de temps en temps, de sorte qu'un programme pourrait donner des résultats différents lorsqu'il est exécuté à des moments différents. Ou pour le dire en termes Haskell, "diffUTCTime" devrait renvoyer un résultat dans la monade IO.
Connexes: http://stackoverflow.com/questions/4194340/is-there-a-better-way-to-convert-from-utctime-to-epochtime – katrielalex