module Graphics.Proc.Lib.Input.Time( year, month, day, utcHour, hour, minute, second, millis ) where import Control.Monad.Trans.State.Strict import Data.Time.Clock import Data.Time.LocalTime import Data.Time.Calendar import Graphics.Proc.Core import Data.Fixed date :: IO (Integer,Int,Int) -- :: (year,month,day) date = getCurrentTime >>= return . toGregorian . utctDay -- | The year() function returns the current year as an integer (2003, 2004, 2005, etc). -- -- processing docs: year :: Pio Int year = liftIO $ fmap (\(y, _, _) -> fromInteger y) date -- | The month() function returns the current month as a value from 1 - 12. -- -- processing docs: month :: Pio Int month = liftIO $ fmap (\(_, m, _) -> m) date -- | The day() function returns the current day as a value from 1 - 31. -- -- processing docs: day :: Pio Int day = liftIO $ fmap (\(_, _, d) -> d) date -- getTime = liftIO $ fmap (\(UTCTime _ time) -> time) getCurrentTime getTime = liftIO $ do fmap (localTimeOfDay . zonedTimeToLocalTime) getZonedTime getUtcTime = liftIO $ fmap utctDayTime getCurrentTime -- | Returens univeral hour. utcHour :: Pio Int utcHour = fmap toHour getUtcTime where toHour x = (floor x) `div` (60 * 60) -- | The hour() function returns the current hour as a value from 0 - 23. -- -- processing docs: hour :: Pio Int hour = fmap todHour getTime -- | The minute() function returns the current minute as a value from 0 - 59. -- -- processing docs: minute :: Pio Int minute = fmap todMin getTime -- | The second() function returns the current second as a value from 0 - 59. -- -- processing docs: second :: Pio Int second = liftIO $ fmap toSecond $ getCurrentTime >>= return . fromRational . toRational . utctDayTime where toSecond x = (floor x) `mod` 60 -- | Returns the number of milliseconds (thousandths of a second) since starting the program. This information is often used for timing events and animation sequences. -- -- processing docs: millis :: Pio Int millis = do start <- getStartTime now <- liftIO $ getCurrentTime return $ floor $ (* 1000) $ diffUTCTime now start