hora 1.0.3 → 1.1
raw patch · 17 files changed
+241/−290 lines, 17 filesdep −regex-doPVP ok
version bump matches the API change (PVP)
Dependencies removed: regex-do
API changes (from Hackage documentation)
- Data.Time.Hora.Format: hmsFraction :: String
- Data.Time.Hora.Format: hmsFraction' :: String
- Data.Time.Hora.Format: partFormats :: DmyHm String
- Data.Time.Hora.Format: spicoFormat :: String
- Data.Time.Hora.Format: ymdHms :: String
- Data.Time.Hora.Parse: class Parse out
- Data.Time.Hora.Parse: instance Data.Time.Hora.Parse.Parse Data.Time.Hora.Type.DmyHm.DmyHmp
- Data.Time.Hora.Parse: instance Data.Time.Hora.Parse.Parse Data.Time.Hora.Type.DmyHm.DmyHmp'
- Data.Time.Hora.Timestamp: t' :: IO String
- Data.Time.Hora.Type.DmyHm: DmyHm :: a -> a -> a -> a -> a -> DmyHm a
- Data.Time.Hora.Type.DmyHm: DmyHmp :: (DmyHm Int, Pico) -> DmyHmp
- Data.Time.Hora.Type.DmyHm: [day] :: DmyHm a -> a
- Data.Time.Hora.Type.DmyHm: [hour] :: DmyHm a -> a
- Data.Time.Hora.Type.DmyHm: [minute] :: DmyHm a -> a
- Data.Time.Hora.Type.DmyHm: [month] :: DmyHm a -> a
- Data.Time.Hora.Type.DmyHm: [year] :: DmyHm a -> a
- Data.Time.Hora.Type.DmyHm: data DmyHm a
- Data.Time.Hora.Type.DmyHm: instance Data.Binary.Class.Binary (Data.Time.Hora.Type.DmyHm.DmyHm GHC.Types.Int)
- Data.Time.Hora.Type.DmyHm: instance Data.Binary.Class.Binary Data.Time.Hora.Type.DmyHm.DmyHmp
- Data.Time.Hora.Type.DmyHm: instance GHC.Base.Functor Data.Time.Hora.Type.DmyHm.DmyHm
- Data.Time.Hora.Type.DmyHm: instance GHC.Classes.Eq Data.Time.Hora.Type.DmyHm.DmyHmp
- Data.Time.Hora.Type.DmyHm: instance GHC.Classes.Eq a => GHC.Classes.Eq (Data.Time.Hora.Type.DmyHm.DmyHm a)
- Data.Time.Hora.Type.DmyHm: instance GHC.Classes.Ord (Data.Time.Hora.Type.DmyHm.DmyHm GHC.Types.Int)
- Data.Time.Hora.Type.DmyHm: instance GHC.Classes.Ord Data.Time.Hora.Type.DmyHm.DmyHmp
- Data.Time.Hora.Type.DmyHm: instance GHC.Generics.Generic (Data.Time.Hora.Type.DmyHm.DmyHm GHC.Types.Int)
- Data.Time.Hora.Type.DmyHm: instance GHC.Generics.Generic Data.Time.Hora.Type.DmyHm.DmyHmp
- Data.Time.Hora.Type.DmyHm: instance GHC.Show.Show Data.Time.Hora.Type.DmyHm.DmyHmp
- Data.Time.Hora.Type.DmyHm: instance GHC.Show.Show a => GHC.Show.Show (Data.Time.Hora.Type.DmyHm.DmyHm a)
- Data.Time.Hora.Type.DmyHm: newtype DmyHmp
- Data.Time.Hora.Type.DmyHm: pico2second :: DmyHmp -> YmdHms
- Data.Time.Hora.Type.DmyHm: type DmyHmp' = (DmyHm String, String)
- Data.Time.Hora.Type.YmdHms: YmdHms :: Int -> Int -> Int -> Int -> Int -> Int -> YmdHms
- Data.Time.Hora.Type.YmdHms: [day] :: YmdHms -> Int
- Data.Time.Hora.Type.YmdHms: [hour] :: YmdHms -> Int
- Data.Time.Hora.Type.YmdHms: [minute] :: YmdHms -> Int
- Data.Time.Hora.Type.YmdHms: [month] :: YmdHms -> Int
- Data.Time.Hora.Type.YmdHms: [second] :: YmdHms -> Int
- Data.Time.Hora.Type.YmdHms: [year] :: YmdHms -> Int
- Data.Time.Hora.Type.YmdHms: data YmdHms
- Data.Time.Hora.Type.YmdHms: instance GHC.Classes.Eq Data.Time.Hora.Type.YmdHms.YmdHms
- Data.Time.Hora.Type.YmdHms: instance GHC.Classes.Ord Data.Time.Hora.Type.YmdHms.YmdHms
- Data.Time.Hora.Type.YmdHms: instance GHC.Show.Show Data.Time.Hora.Type.YmdHms.YmdHms
+ Data.Time.Hora.Convert: picoTimeSpan :: Num a => Pico -> TimeSpan a
+ Data.Time.Hora.Convert: timeSpanPico :: Integral a => TimeSpan a -> Pico
+ Data.Time.Hora.Format: iso :: UTCTime -> String
+ Data.Time.Hora.Format: iso' :: TimeZone -> UTCTime -> Tz String
+ Data.Time.Hora.Format: ymd' :: TimeZone -> UTCTime -> Tz String
+ Data.Time.Hora.Timestamp: d' :: IO (Tz String)
+ Data.Time.Hora.Timestamp: now' :: IO (Tz (DatePart Int))
+ Data.Time.Hora.Timestamp: tf :: IO String
+ Data.Time.Hora.Type.DatePart: DatePart :: a -> a -> a -> a -> a -> a -> a -> DatePart a
+ Data.Time.Hora.Type.DatePart: [day] :: DatePart a -> a
+ Data.Time.Hora.Type.DatePart: [hour] :: DatePart a -> a
+ Data.Time.Hora.Type.DatePart: [minute] :: DatePart a -> a
+ Data.Time.Hora.Type.DatePart: [month] :: DatePart a -> a
+ Data.Time.Hora.Type.DatePart: [pico] :: DatePart a -> a
+ Data.Time.Hora.Type.DatePart: [second] :: DatePart a -> a
+ Data.Time.Hora.Type.DatePart: [year] :: DatePart a -> a
+ Data.Time.Hora.Type.DatePart: data DatePart a
+ Data.Time.Hora.Type.DatePart: instance Data.Binary.Class.Binary (Data.Time.Hora.Type.DatePart.DatePart GHC.Base.String)
+ Data.Time.Hora.Type.DatePart: instance Data.Binary.Class.Binary (Data.Time.Hora.Type.DatePart.DatePart GHC.Types.Int)
+ Data.Time.Hora.Type.DatePart: instance GHC.Base.Functor Data.Time.Hora.Type.DatePart.DatePart
+ Data.Time.Hora.Type.DatePart: instance GHC.Classes.Eq a => GHC.Classes.Eq (Data.Time.Hora.Type.DatePart.DatePart a)
+ Data.Time.Hora.Type.DatePart: instance GHC.Classes.Ord (Data.Time.Hora.Type.DatePart.DatePart GHC.Types.Int)
+ Data.Time.Hora.Type.DatePart: instance GHC.Generics.Generic (Data.Time.Hora.Type.DatePart.DatePart a)
+ Data.Time.Hora.Type.DatePart: instance GHC.Show.Show a => GHC.Show.Show (Data.Time.Hora.Type.DatePart.DatePart a)
- Data.Time.Hora.Format: ymd :: TimeZone -> UTCTime -> Tz String
+ Data.Time.Hora.Format: ymd :: UTCTime -> String
- Data.Time.Hora.Parse: parse :: Parse out => UTCTime -> out
+ Data.Time.Hora.Parse: parse :: Num a => UTCTime -> DatePart a
- Data.Time.Hora.Parse: parse' :: TimeZone -> UTCTime -> Tz DmyHmp
+ Data.Time.Hora.Parse: parse' :: Num a => TimeZone -> UTCTime -> Tz (DatePart a)
- Data.Time.Hora.Timestamp: d :: IO (Tz String)
+ Data.Time.Hora.Timestamp: d :: IO String
- Data.Time.Hora.Timestamp: now :: IO (Tz DmyHmp)
+ Data.Time.Hora.Timestamp: now :: IO (DatePart Int)
Files
- changelog.md +5/−0
- hora.cabal +2/−6
- src/Data/Time/Hora/Convert.hs +25/−11
- src/Data/Time/Hora/Format.hs +24/−64
- src/Data/Time/Hora/Future.hs +0/−1
- src/Data/Time/Hora/Parse.hs +35/−32
- src/Data/Time/Hora/Timestamp.hs +69/−34
- src/Data/Time/Hora/Type/DatePart.hs +44/−0
- src/Data/Time/Hora/Type/DmyHm.hs +0/−66
- src/Data/Time/Hora/Type/Time.hs +13/−3
- src/Data/Time/Hora/Type/YmdHms.hs +0/−22
- src/Data/Time/Hora/WithTimeZone.hs +0/−18
- test/Test/TestConvert.hs +0/−4
- test/Test/TestDiffTime.hs +3/−3
- test/Test/TestDmyHm.hs +11/−7
- test/Test/TestPico.hs +9/−8
- test/Test/TestTime.hs +1/−11
changelog.md view
@@ -1,3 +1,8 @@+##### 1.1+ API overhaul+ + remove dep on regex-do + ##### 1.0.3 fix Eq, Ord TimeSpan: was derived. Implemented manually
hora.cabal view
@@ -1,5 +1,5 @@ name: hora-version: 1.0.3+version: 1.1 build-type: Simple cabal-version: >=1.10 @@ -23,19 +23,16 @@ Data.Time.Hora.Convert Data.Time.Hora.Future Data.Time.Hora.Timestamp- Data.Time.Hora.Type.YmdHms- Data.Time.Hora.Type.DmyHm+ Data.Time.Hora.Type.DatePart Data.Time.Hora.Type.Time Data.Time.Hora.Parse Data.Time.Hora.Format other-modules: - Data.Time.Hora.WithTimeZone ghc-options: -fwarn-unused-imports build-depends: base >=4.7 && <5.0, time,- regex-do >= 3.1, binary hs-source-dirs: src@@ -90,5 +87,4 @@ hspec >= 2.1.7, QuickCheck >= 2.8.1, time,- regex-do >= 3.1, binary
src/Data/Time/Hora/Convert.hs view
@@ -1,20 +1,24 @@ module Data.Time.Hora.Convert - (-- ** multipliers- picoSec,- picoMs,- msSec,- -- ** conversion+ (-- ** 'TimeSpan' toPico, toMilli, toSec,+ -- ** 'Pico' - 'TimeSpan' conversion+ picoTimeSpan,+ timeSpanPico, -- ** diff time toDiffTime,- nominalDiff + nominalDiff,+ -- ** multipliers+ picoSec,+ picoMs,+ msSec ) where import Data.Ratio import Data.Time.Clock import Data.Time.Hora.Type.Time+import Data.Fixed -- | pico in 1 second@@ -29,21 +33,22 @@ msSec::Integral a => a msSec = 1000 -{- | >>> toPico (Milli 1) - 1000000000 -}+{- | >>> toPico $ Milli 3+3000000000 -} toPico::TwoInt a b => TimeSpan a -> b toPico (Pico i0) = fromIntegral i0 toPico (Milli i0) = fromIntegral $ i0 * picoMs toPico (Sec i0) = fromIntegral $ i0 * picoSec -{- | >>> toMilli (Sec 1)- 1000 -}+{- | >>> toMilli $ Sec 5+5000 -} toMilli::TwoInt a b => TimeSpan a -> b toMilli (Pico i0) = fromIntegral $ i0 `div` picoMs toMilli (Milli i0) = fromIntegral $ i0 toMilli (Sec i0) = fromIntegral $ i0 * msSec -+{- | >>> toSec $ Milli 781200+781 -} toSec::TwoInt a b => TimeSpan a -> b toSec (Pico i0) = fromIntegral $ i0 `div` picoSec toSec (Milli i0) = fromIntegral $ i0 `div` msSec@@ -60,3 +65,12 @@ nominalDiff ts0 = let s1 = toPico ts0::Integer in fromRational $ s1 % picoSec +++picoTimeSpan::Num a => Pico -> TimeSpan a+picoTimeSpan (MkFixed p0) = Pico $ fromIntegral p0+++timeSpanPico::Integral a => TimeSpan a -> Pico +timeSpanPico ts0 = MkFixed $ fromIntegral p0+ where p0 = toPico ts0
src/Data/Time/Hora/Format.hs view
@@ -2,82 +2,42 @@ import Data.Time.Format (formatTime,defaultTimeLocale) import Data.Time.Clock-import Data.Time.Hora.Type.DmyHm as M import Data.Time.LocalTime as L-import qualified Text.Regex.Do.Replace.Template as F-import qualified Text.Regex.Do.Pad as F import Data.Time.Calendar import Data.Time.Hora.Type.Time+import Text.Printf -{- | yyyymmdd -}-ymd::TimeZone -> UTCTime -> Tz String-ymd tz0 utc0 =+{- | yyyy-mm-dd UTC -}+iso::UTCTime -> String+iso t0 = showGregorian $ utctDay t0+++{- | yyyy-mm-dd local -}+iso'::TimeZone -> UTCTime -> Tz String+iso' tz0 utc0 = let lt2 = L.utcToLocalTime tz0 utc0 day2 = localDay lt2 (y3,m3,d3) = toGregorian day2- f4 i4 = F.pad '0' 2 $ show i4- in Tz tz0 $ "{0}{1}{2}" F.< (f4 <$> [fromIntegral y3,m3,d3])- + in Tz tz0 $ printf "%04v-%02v-%02v" y3 m3 d3 -{- | format UTCTime just as you need it. uses 'defaultTimeLocale' -@-import Text.Regex.Do.Replace.Template -import Prelude hiding ((\<),(\>))-...+{- | yyyymmdd UTC -}+ymd::UTCTime -> String+ymd utc0 = formatTime defaultTimeLocale "%Y%m%d" utc0 -it "formatUTCTime" $ do- t1 <- getCurrentTime - let p1@DmyHm{..} = partFormats- traceIO $ formatUTCTime (("{day}/{month} {hour}:{minute}") < - [("day",day),("month",month),("hour",hour),("minute",minute)])- t1 -12/12 18:39 -@ -}-formatUTCTime::String -- ^ see 'formatTime'. can also make format with functions in this module +{- | yyyymmdd local -}+ymd'::TimeZone -> UTCTime -> Tz String+ymd' tz0 utc0 =+ let lt2 = L.utcToLocalTime tz0 utc0+ day2 = localDay lt2+ (y3,m3,d3) = toGregorian day2+ in Tz tz0 $ printf "%04v%02v%02v" y3 m3 d3+ ++formatUTCTime::String -- ^ format. see 'formatTime' -> UTCTime -> String formatUTCTime format0 = formatTime defaultTimeLocale format0----- | %T%Q-hmsFraction::String-hmsFraction = "%T%Q"---- | %T %Q-hmsFraction'::String-hmsFraction' = "%T %Q"----- | %F %T-ymdHms::String-ymdHms = "%F %T"--{- | %S.%-q --second.pico -}-spicoFormat::String-spicoFormat = "%S.%-q" ----{- | some formats /no padding/ -- see 'formatTime' for full measure--@-day %-d-month %-m-year %Y-hour %-H-minute %-M @ -}-partFormats::DmyHm String-partFormats = DmyHm {- M.day = "%-d",- M.month = "%-m",- M.year = "%Y",- M.hour = "%-H",- M.minute = "%-M"- }+
src/Data/Time/Hora/Future.hs view
@@ -43,4 +43,3 @@ instance PicoDiff Pico where (-) (MkFixed t2) (MkFixed t1) = Pico $ t2 P.- t1--- ^ e.g. Pico part in 'DmyHmp'
src/Data/Time/Hora/Parse.hs view
@@ -1,47 +1,50 @@ module Data.Time.Hora.Parse where -import Data.Time.Hora.Type.DmyHm as M+import Data.Time.Hora.Type.DatePart as M import Data.Time.Hora.Type.Time import Data.Time.Clock import Data.Time.Calendar import Data.Time.LocalTime as L-import Data.Time.Hora.Format+import Data.Fixed +{- | UTC -}+parse::Num a => UTCTime -> DatePart a+parse t0 = + let day1 = utctDay t0::Day+ dt1 = utctDayTime t0::DiffTime+ (y1,m1,d1) = toGregorian day1+ tod1 = timeToTimeOfDay dt1::TimeOfDay+ pico4 = todSec tod1::Fixed E12+ (sec5, MkFixed pico5) = properFraction pico4+ in DatePart {+ year = fromIntegral y1,+ month = fromIntegral m1,+ day = fromIntegral d1,+ hour = fromIntegral $ todHour tod1,+ minute = fromIntegral $ todMin tod1,+ second = fromIntegral sec5,+ pico = fromIntegral pico5+ } -{- | specified time in specified zone, to 'DmyHmP' -}-parse'::TimeZone -> UTCTime -> Tz DmyHmp++{- | specified time zone -}+parse'::Num a => + TimeZone -> UTCTime -> Tz (DatePart a) parse' tz0 utc0 = let lt2 = L.utcToLocalTime tz0 utc0 day2 = localDay lt2 time2 = localTimeOfDay lt2 (y3,m3,d3) = toGregorian day2- d4 = DmyHm{- M.year = fromIntegral y3,- M.month = m3,- M.day = d3,- M.hour = todHour time2,- M.minute = todMin time2+ d4 = DatePart{+ year = fromIntegral y3,+ month = fromIntegral m3,+ day = fromIntegral d3,+ hour = fromIntegral $ todHour time2,+ minute = fromIntegral $ todMin time2,+ second = fromIntegral sec5,+ pico = fromIntegral pico5 }- pico4 = todSec time2- in Tz tz0 $ DmyHmp (d4,pico4)---{- | from specified 'UTCTime' -}-class Parse out where- parse::UTCTime -> out- - -instance Parse DmyHmp where- parse::UTCTime -> DmyHmp- parse t0 = let (dm1,pico1) = parse t0- in DmyHmp (read <$> dm1,read pico1)---instance Parse DmyHmp' where- parse::UTCTime -> DmyHmp'- parse t1 =- let dm1 = flip formatUTCTime t1 <$> partFormats- pico2 = formatUTCTime spicoFormat t1- in (dm1,pico2)-+ pico4 = todSec time2::Fixed E12+ (sec5, MkFixed pico5) = properFraction pico4+ in Tz tz0 d4
src/Data/Time/Hora/Timestamp.hs view
@@ -1,76 +1,111 @@ module Data.Time.Hora.Timestamp (-- ** numerical- now,+ now, now', -- ** string- t,- t',+ t, tf, dt,- d) where+ d, d') where import Data.Time.Clock-import Data.Time.Hora.WithTimeZone import Data.Time.Hora.Format-import Data.Time.Hora.Type.DmyHm+import Data.Time.Hora.Type.DatePart import Data.Time.Hora.Type.Time import Data.Time.Hora.Parse+import Data.Time.LocalTime as L -{-| time with Pico in current timezone +{-| UTC >>> now-Tz CET (DmyHm {day = 12, month = 12, year = 2016, hour = 19, minute = 33},15.546562180000)+DatePart {year = 2016, month = 12, day = 14, hour = 9, minute = 7, second = 10, pico = 233275605000} -}-now::IO (Tz DmyHmp)-now = withTimeZone parse'+now::IO (DatePart Int)+now = withUTCTime parse +{-| current timezone -{- | timestamp +>>> now'+Tz CET (DatePart {year = 2016, month = 12, day = 14, hour = 10, minute = 7, second = 26, pico = 498313115000})+-}+now'::IO (Tz (DatePart Int))+now' = withTimeZone parse' -second.fraction. __UTC__ ->>> t-14:41:29.785834836++{- | time.fraction UTC++>>> tf+09:10:58.030311306 -}-t::IO String-t = do+tf::IO String+tf = do utc0 <- getCurrentTime- pure $ formatUTCTime hmsFraction utc0+ pure $ formatUTCTime "%T%Q" utc0 -{- | timestamp --second.fraction. __UTC__+{- | time UTC ->>> t'-14:41:29 .785834836+>>> t+09:11:18 -}-t'::IO String-t' = do+t::IO String+t = do utc0 <- getCurrentTime- pure $ formatUTCTime hmsFraction' utc0+ pure $ formatUTCTime "%T" utc0 -{- | date, time (to second) __UTC__+{- | date, time UTC >>> dt-2016-12-12 14:43:13+"2016-12-14 09:16:23" -} dt::IO String dt = do utc0 <- getCurrentTime- pure $ formatUTCTime ymdHms utc0-+ pure $ formatUTCTime "%F %T" utc0 -{- | date stamp /yyyymmdd/ +{- | date yyyymmdd -__local__ timezone+UTC >>> d-Tz CET "20161212"+"20161214" -}-d::IO (Tz String)-d = withTimeZone ymd+d::IO String+d = withUTCTime ymd ++{- | date yyyymmdd ++local timezone++>>> d'+Tz CET "20161214"+-}+d'::IO (Tz String)+d' = withTimeZone ymd'++++type WithLocalTimeZone a = TimeZone -> UTCTime -> Tz a+type WithUTCTime a = UTCTime -> a+++{- | do calc with current time zone from 'getCurrentTimeZone'++ probably don't need it+-}+withTimeZone::WithLocalTimeZone a -> IO (Tz a)+withTimeZone fn0 = do+ z1 <- getCurrentTimeZone -- CET | CEST+ t1 <- getCurrentTime+ pure $ fn0 z1 t1+++withUTCTime::WithUTCTime a -> IO a+withUTCTime fn0 = do+ t1 <- getCurrentTime+ pure $ fn0 t1
+ src/Data/Time/Hora/Type/DatePart.hs view
@@ -0,0 +1,44 @@+module Data.Time.Hora.Type.DatePart where++import GHC.Generics+import Data.Binary+++-- | Date, Time parts+data DatePart a = DatePart {+ year::a,+ month::a,+ day::a,+ hour::a,+ minute::a,+ second::a,+ pico::a -- ^ excludes seconds. Just fraction as Num + } deriving (Show, Eq, Generic)+++instance Functor DatePart where+ fmap f0 d0 = d0 {+ day = f0 (day d0),+ month = f0 (month d0),+ year = f0 (year d0),+ hour = f0 (hour d0),+ minute = f0 (minute d0),+ second = f0 (second d0),+ pico = f0 (pico d0)+ } ++instance Binary (DatePart Int) +instance Binary (DatePart String)+ ++instance Ord (DatePart Int) where+ (<=) a0 b0 = not $ + year a0 > (year b0)+ || month a0 > (month b0)+ || day a0 > (day b0)+ || hour a0 > (hour b0)+ || minute a0 > (minute b0)+ || second a0 > (second b0)+ || pico a0 > (pico b0)+ +
− src/Data/Time/Hora/Type/DmyHm.hs
@@ -1,66 +0,0 @@-module Data.Time.Hora.Type.DmyHm where--import GHC.Generics-import Data.Binary-import Data.Fixed-import qualified Data.Time.Hora.Type.YmdHms as S----- | Date, Time w/out second-data DmyHm a = DmyHm {- day::a,- month::a,- year::a,- hour::a,- minute::a- } deriving (Show, Eq)---instance Functor DmyHm where- fmap f0 d0 = d0 {- day = f0 (day d0),- month = f0 (month d0),- year = f0 (year d0),- hour = f0 (hour d0),- minute = f0 (minute d0)- } ----- | @(DmyHm {day = "12", month = "12", year = "2016", hour = "17", minute = "32"},"59.727280400000")@-type DmyHmp' = (DmyHm String, String) -- dmyhm----- | @DmyHmp (DmyHm {day = 12, month = 12, year = 2016, hour = 17, minute = 32},59.727482058000)@-newtype DmyHmp = DmyHmp (DmyHm Int, Pico) deriving (Eq, Show, Generic) -- dmyhm, pico--deriving instance Generic (DmyHm Int)-instance Binary (DmyHm Int)-instance Binary DmyHmp--{- | convert from more precise to more common type -}-pico2second::DmyHmp -> S.YmdHms-pico2second (DmyHmp (r0,pico0)) = S.YmdHms {- S.year = year r0,- S.month = month r0,- S.day = day r0,- S.hour = hour r0,- S.minute = minute r0,- S.second = round pico0- }- --instance Ord DmyHmp where- (<=) (DmyHmp(a1,p1)) (DmyHmp(a2,p2)) = - if a1 <= a2 then p1 <= p2- else False---instance Ord (DmyHm Int) where- (<=) a0 b0 = not $ - year a0 > (year b0)- || month a0 > (month b0)- || day a0 > (day b0)- || hour a0 > (hour b0)- || minute a0 > (minute b0)- -
src/Data/Time/Hora/Type/Time.hs view
@@ -21,7 +21,11 @@ --- | ! fromInteger returns 'Pico'. assumes the value is Pico seconds+{- | ! fromInteger returns 'Pico'. assumes the value is Pico seconds++>>> Milli 397100 + (Sec 2) + 37891470000+Pico 399137891470000+-} instance Integral a => Num (TimeSpan a) where (+) = withPico (+) (*) = withPico (*)@@ -33,8 +37,11 @@ fromInteger i0 = Pico $ fromIntegral i0 (-) = withPico (-) +{- | safe to mix sec \/ pico \/ milli --- | safe to mix sec \/ pico \/ milli +>>> Sec 1 == Milli 1000+True+-} instance (Eq a, Integral a) => Eq (TimeSpan a) where (==) (Sec a0) (Sec b0) = a0 == b0 (==) (Milli a0) (Milli b0) = a0 == b0@@ -44,7 +51,10 @@ b1 = toPico b0::Integer --- | safe to mix sec \/ pico \/ milli +{- | safe to mix sec \/ pico \/ milli++>>> Sec 1 > Milli 500+True -} instance (Ord a, Integral a) => Ord (TimeSpan a) where (<=) (Sec a0) (Sec b0) = a0 <= b0 (<=) (Milli a0) (Milli b0) = a0 <= b0
− src/Data/Time/Hora/Type/YmdHms.hs
@@ -1,22 +0,0 @@-module Data.Time.Hora.Type.YmdHms where---data YmdHms = YmdHms {- year::Int,- month::Int,- day::Int,- hour::Int,- minute::Int,- second::Int- } deriving (Show,Eq)---instance Ord YmdHms where- (<=) a0 b0 = not $- year a0 > (year b0)- || month a0 > (month b0)- || day a0 > (day b0)- || hour a0 > (hour b0)- || minute a0 > (minute b0)- || second a0 > (second b0)-
− src/Data/Time/Hora/WithTimeZone.hs
@@ -1,18 +0,0 @@-module Data.Time.Hora.WithTimeZone where--import Data.Time.Clock-import Data.Time.LocalTime as L-import Data.Time.Hora.Type.Time---type WithTimeZone a = TimeZone -> UTCTime -> Tz a--{- | do calc with current time zone from 'getCurrentTimeZone'-- probably don't need it--}-withTimeZone::WithTimeZone a -> IO (Tz a)-withTimeZone fn0 = do- z1 <- getCurrentTimeZone -- CET | CEST- t1 <- getCurrentTime- pure $ fn0 z1 t1
test/Test/TestConvert.hs view
@@ -4,8 +4,6 @@ import Data.Time.Hora.Type.Time import Data.Time.Hora.Convert import Data.Time.Clock-import Data.Time.Hora.Type.DmyHm as D-import Data.Time.Hora.Type.YmdHms as Y main::IO()@@ -47,8 +45,6 @@ it "toPicos sec" $ toPico (Sec 1) `shouldBe` 1000000000000 it "toMillis sec" $ toMilli (Sec 1) `shouldBe` 1000 it "toDiffTime sec" $ toDiffTime (Sec 1) `shouldBe` (secondsToDiffTime 1)- it "pico2second" $ pico2second (DmyHmp (DmyHm {D.day = 3, D.month = 4, D.year = 2016, D.hour = 10, D.minute = 31}, 21.2589))- `shouldBe` YmdHms { Y.day = 3, Y.month = 4, Y.year = 2016, Y.hour = 10, Y.minute = 31, Y.second = 21} i::Int -> Int
test/Test/TestDiffTime.hs view
@@ -21,10 +21,10 @@ traceIO $ show diff3 1 `shouldBe` 1 it "DmyHmP" $ do- Tz tz1 dmy2 <- now- traceIO $ show dmy2+ dmy2 <- now+ traceIO $ "TestDiffTime" ++ (show dmy2) 1 `shouldBe` 1 it "dmy_local" $ do- Tz tz1 l1 <- d+ Tz tz1 l1 <- d' traceIO $ show l1 1 `shouldBe` 1
test/Test/TestDmyHm.hs view
@@ -1,7 +1,7 @@ module Test.TestDmyHm where import Test.Hspec-import Data.Time.Hora.Type.DmyHm+import Data.Time.Hora.Type.DatePart main::IO()@@ -9,17 +9,21 @@ describe "Test.TestDmyHm" $ do it "case 1" $ do a1 `shouldSatisfy` (< b1)- where a1 = DmyHm {+ where a1 = DatePart { year = 2016, month = 10, day = 3, hour = 15,- minute = 23- }::DmyHm Int- b1 = DmyHm {+ minute = 23,+ second = 10,+ pico = 123456+ }::DatePart Int+ b1 = DatePart { year = 2016, month = 10, day = 3, hour = 15,- minute = 24- }::DmyHm Int+ minute = 24,+ second = 10,+ pico = 123456+ }::DatePart Int
test/Test/TestPico.hs view
@@ -5,10 +5,11 @@ import Data.Time.Hora.Parse import Data.Time.Hora.Future as F import Data.Time.Clock-import Data.Time.Hora.Type.DmyHm+import Data.Time.Hora.Type.DatePart+import Data.Time.Hora.Type.Time import Data.Time.LocalTime import Data.Time.Hora.Timestamp-+import Prelude as P main::IO() main = hspec $ do@@ -17,10 +18,10 @@ now >>= traceIO . show 1 `shouldBe` 1 it "parse DmyHmsFormat" $ do- getCurrentTime >>= pure . parse >>= \(f1::DmyHmp') -> traceIO $ show f1 + getCurrentTime >>= pure . parse >>= \(f1::DatePart Int) -> traceIO $ show f1 1 `shouldBe` 1 it "parse DmyHmP" $ do- getCurrentTime >>= pure . parse >>= \(f1::DmyHmp) -> traceIO $ show f1+ getCurrentTime >>= pure . parse >>= \(f1::DatePart Int) -> traceIO $ show f1 1 `shouldBe` 1 it "parse' DmyHmP curr timezone" $ do getCurrentTime >>= \t1 -> do@@ -31,9 +32,9 @@ it "- pico" $ do t1 <- getCurrentTime t2 <- getCurrentTime- let DmyHmp (_,d1) = parse t1::DmyHmp- DmyHmp (_,d2) = parse t2::DmyHmp+ let d1 = parse t1::DatePart Integer+ d2 = parse t2::DatePart Integer diff1 = t2 F.- t1- diff2 = d2 F.- d1 - diff1 `shouldBe` diff2+ diff2 = pico d2 P.- (pico d1) + diff1 `shouldBe` (Pico diff2)
test/Test/TestTime.hs view
@@ -4,11 +4,7 @@ import Test.Hspec import Debug.Trace import Data.Time.Hora.Timestamp-import Text.Regex.Do.Replace.Template import Prelude hiding ((<),(>))-import Data.Time.Hora.Type.DmyHm-import Data.Time.Clock-import Data.Time.Hora.Format main::IO()@@ -18,7 +14,7 @@ t >>= traceIO 1 `shouldBe` 1 it "timestamp'" $ do- t' >>= traceIO+ tf >>= traceIO 1 `shouldBe` 1 it "datetimestamp" $ do dt >>= traceIO@@ -26,9 +22,3 @@ it "ymd_local" $ do d >>= traceIO . show 1 `shouldBe` 1- it "formatUTCTime" $ do- t1 <- getCurrentTime - let p1@DmyHm{..} = partFormats- traceIO $ formatUTCTime (("{day}/{month} {hour}:{minute}") < [("day",day),("month",month),("hour",hour),("minute",minute)])- t1 - 1 `shouldBe` 1