Я не эксперт по пакету time
, но как насчет этого:
import Data.Time -- need Clock and LocalTime
curTime <- getCurrentTime
let curTOD = timeToTimeOfDay $ utctDayTime curTime
last = TimeOfDay (todHour curTOD) (todMin curTOD) 0
diff = timeOfDayToTime last + 60 - utctDayTime curTime
Это приведет к diff :: DiffTime
с правильной разницей в секундах; все границы и високосные годы должны быть учтены. Я не уверен насчет високосных секунд; вам, вероятно, потребуется добавить их вручную.
Это не относится к каким-либо искажениям, связанным с часовым поясом, но, поскольку getCurrentTime
возвращает UTCTime, я думаю, что оно будет работать в целом. Вы можете попробовать использовать utcToLocalTimeOfDay
вместо timeToTimeOfDay
для управления вещами, относящимися к часовому поясу, но тогда вам придется проделать дополнительную работу для управления смещениями дня.