
import Data.Time
import System.Environment
import System.Locale
import Text.Printf

main = do
    [tStr] <- getArgs
    zone <- getCurrentTimeZone
    now <- getCurrentTime
    let (Just localT) =
            parseTime defaultTimeLocale "%Y/%m/%d %H:%M:%S" tStr
                :: Maybe LocalTime
        t = localTimeToUTC zone localT
        diff = floor $ toRational (diffUTCTime t now)
        (inFuture, seconds) = (diff > 0, abs diff)
        (minutes, rSeconds) = seconds `quotRem` 60
        (hours, rMinutes)   = minutes `quotRem` 60
        (days, rHours)      =   hours `quotRem` 24
        prefix = if inFuture then ' ' else '-'
    printf "%c%dd %02d:%02d:%02d\n"
        prefix (days :: Integer) rHours rMinutes rSeconds

