time 1.4.0.1 → 1.4.0.2
raw patch · 73 files changed
+4499/−4263 lines, 73 filesdep +Cabaldep +QuickCheckdep +processdep ~basedep ~deepseqsetup-changed
Dependencies added: Cabal, QuickCheck, process, test-framework, test-framework-quickcheck2
Dependency ranges changed: base, deepseq
Files
- Data/Time/Calendar/Days.hs +1/−1
- Data/Time/Calendar/Private.hs +14/−18
- Data/Time/Clock/Scale.hs +2/−2
- Data/Time/Clock/TAI.hs +1/−1
- Data/Time/Clock/UTC.hs +2/−2
- Data/Time/Format.hs +28/−28
- Data/Time/Format/Parse.hs +126/−74
- Data/Time/LocalTime/LocalTime.hs +2/−2
- Data/Time/LocalTime/TimeOfDay.hs +1/−1
- Data/Time/LocalTime/TimeZone.hs +1/−1
- Setup.hs +1/−25
- Test.hs +11/−0
- Test/AddDays.hs +41/−0
- Test/AddDaysRef.hs +250/−0
- Test/ClipDates.hs +46/−0
- Test/ClipDatesRef.hs +566/−0
- Test/ConvertBack.hs +40/−0
- Test/CurrentTime.hs +13/−0
- Test/LongWeekYears.hs +20/−0
- Test/LongWeekYearsRef.hs +155/−0
- Test/RealToFracBenchmark.hs +22/−0
- Test/ShowDST.hs +43/−0
- Test/TAI_UTC_DAT.hs +42/−0
- Test/TestCalendars.hs +30/−0
- Test/TestCalendarsRef.hs +9/−0
- Test/TestEaster.hs +38/−0
- Test/TestEasterRef.hs +62/−0
- Test/TestFormat.hs +186/−0
- Test/TestFormatStuff.c +15/−0
- Test/TestFormatStuff.h +6/−0
- Test/TestMonthDay.hs +22/−0
- Test/TestMonthDayRef.hs +751/−0
- Test/TestParseDAT.hs +53/−0
- Test/TestParseDAT_Ref.hs +95/−0
- Test/TestParseTime.hs +438/−0
- Test/TestTime.hs +106/−0
- Test/TestTimeRef.hs +881/−0
- Test/TestUtil.hs +38/−0
- Test/Tests.hs +28/−0
- Test/TimeZone.hs +10/−0
- Test/UseCases.lhs +83/−0
- configure +118/−80
- configure.ac +3/−1
- include/HsTimeConfig.h +2/−2
- test/AddDays.hs +0/−41
- test/AddDays.ref +0/−245
- test/ClipDates.hs +0/−26
- test/ClipDates.ref +0/−561
- test/ConvertBack.hs +0/−36
- test/CurrentTime.hs +0/−13
- test/LongWeekYears.hs +0/−18
- test/LongWeekYears.ref +0/−150
- test/Makefile +0/−105
- test/RealToFracBenchmark.hs +0/−22
- test/ShowDST.hs +0/−43
- test/TestCalendars.hs +0/−29
- test/TestCalendars.ref +0/−4
- test/TestEaster.hs +0/−23
- test/TestEaster.ref +0/−57
- test/TestFormat.hs +0/−159
- test/TestFormatStuff.c +0/−15
- test/TestFormatStuff.h +0/−6
- test/TestMonthDay.hs +0/−20
- test/TestMonthDay.ref +0/−746
- test/TestParseDAT.hs +0/−62
- test/TestParseDAT.ref +0/−90
- test/TestParseTime.hs +0/−437
- test/TestTime.hs +0/−97
- test/TestTime.ref +0/−874
- test/TimeZone.hs +0/−10
- test/UseCases.lhs +0/−83
- test/tai-utc.dat +0/−37
- time.cabal +97/−16
Data/Time/Calendar/Days.hs view
@@ -27,7 +27,7 @@ rnf (ModifiedJulianDay a) = rnf a instance Typeable Day where- typeOf _ = mkTyConApp (mkTyCon "Data.Time.Calendar.Days.Day") []+ typeOf _ = mkTyConApp (mkTyCon3 "time" "Data.Time.Calendar.Days" "Day") [] -- necessary because H98 doesn't have "cunning newtype" derivation instance Enum Day where
Data/Time/Calendar/Private.hs view
@@ -9,33 +9,29 @@ pad1 (Just c) s = c:s pad1 _ s = s +padN :: Int -> Char -> String -> String+padN i _ s | i <= 0 = s+padN i c s = (replicate i c) ++ s+ show2Fixed :: NumericPadOption -> Pico -> String show2Fixed opt x | x < 10 = pad1 opt (showFixed True x) show2Fixed _ x = showFixed True x +showPaddedMin :: (Num t,Ord t,Show t) => Int -> NumericPadOption -> t -> String+showPaddedMin _ Nothing i = show i+showPaddedMin pl opt i | i < 0 = '-':(showPaddedMin pl opt (negate i))+showPaddedMin pl (Just c) i =+ let s = show i in + padN (pl - (length s)) c s+ show2 :: (Num t,Ord t,Show t) => NumericPadOption -> t -> String-show2 opt i | i < 0 = '-':(show2 opt (negate i))-show2 opt i = let- s = show i in- case s of- [_] -> pad1 opt s- _ -> s+show2 = showPaddedMin 2 show3 :: (Num t,Ord t,Show t) => NumericPadOption -> t -> String-show3 opt i | i < 0 = '-':(show3 opt (negate i))-show3 opt i = let- s = show2 opt i in- case s of- [_,_] -> pad1 opt s- _ -> s+show3 = showPaddedMin 3 show4 :: (Num t,Ord t,Show t) => NumericPadOption -> t -> String-show4 opt i | i < 0 = '-':(show4 opt (negate i))-show4 opt i = let- s = show3 opt i in- case s of- [_,_,_] -> pad1 opt s- _ -> s+show4 = showPaddedMin 4 mod100 :: (Integral i) => i -> i mod100 x = mod x 100
Data/Time/Clock/Scale.hs view
@@ -35,7 +35,7 @@ rnf (ModJulianDate a) = rnf a instance Typeable UniversalTime where- typeOf _ = mkTyConApp (mkTyCon "Data.Time.Clock.Scale.UniversalTime") []+ typeOf _ = mkTyConApp (mkTyCon3 "time" "Data.Time.Clock.Scale" "UniversalTime") [] -- | This is a length of time, as measured by a clock. -- Conversion functions will treat it as seconds.@@ -55,7 +55,7 @@ instance NFData DiffTime -- FIXME: Data.Fixed had no NFData instances yet at time of writing instance Typeable DiffTime where- typeOf _ = mkTyConApp (mkTyCon "Data.Time.Clock.Scale.DiffTime") []+ typeOf _ = mkTyConApp (mkTyCon3 "time" "Data.Time.Clock.Scale" "DiffTime") [] -- necessary because H98 doesn't have "cunning newtype" derivation instance Enum DiffTime where
Data/Time/Clock/TAI.hs view
@@ -40,7 +40,7 @@ rnf (MkAbsoluteTime a) = rnf a instance Typeable AbsoluteTime where- typeOf _ = mkTyConApp (mkTyCon "Data.Time.Clock.TAI.AbsoluteTime") []+ typeOf _ = mkTyConApp (mkTyCon3 "time" "Data.Time.Clock.TAI" "AbsoluteTime") [] instance Show AbsoluteTime where show t = show (utcToLocalTime utc (taiToUTCTime (const 0) t)) ++ " TAI" -- ugly, but standard apparently
Data/Time/Clock/UTC.hs view
@@ -45,7 +45,7 @@ rnf (UTCTime d t) = d `deepseq` t `deepseq` () instance Typeable UTCTime where- typeOf _ = mkTyConApp (mkTyCon "Data.Time.Clock.UTC.UTCTime") []+ typeOf _ = mkTyConApp (mkTyCon3 "time" "Data.Time.Clock.UTC" "UTCTime") [] instance Eq UTCTime where (UTCTime da ta) == (UTCTime db tb) = (da == db) && (ta == tb)@@ -75,7 +75,7 @@ instance NFData NominalDiffTime -- FIXME: Data.Fixed had no NFData instances yet at time of writing instance Typeable NominalDiffTime where- typeOf _ = mkTyConApp (mkTyCon "Data.Time.Clock.UTC.NominalDiffTime") []+ typeOf _ = mkTyConApp (mkTyCon3 "time" "Data.Time.Clock.UTC" "NominalDiffTime") [] instance Enum NominalDiffTime where succ (MkNominalDiffTime a) = MkNominalDiffTime (succ a)
Data/Time/Format.hs view
@@ -73,25 +73,25 @@ -- -- [@%r@] as 'time12Fmt' @locale@ (e.g. @%I:%M:%S %p@) ----- [@%P@] day half from ('amPm' @locale@), converted to lowercase, @am@, @pm@+-- [@%P@] day-half of day from ('amPm' @locale@), converted to lowercase, @am@, @pm@ ----- [@%p@] day half from ('amPm' @locale@), @AM@, @PM@+-- [@%p@] day-half of day from ('amPm' @locale@), @AM@, @PM@ ----- [@%H@] hour, 24-hour, leading 0 as needed, @00@ - @23@+-- [@%H@] hour of day (24-hour), 0-padded to two chars, @00@ - @23@ ----- [@%I@] hour, 12-hour, leading 0 as needed, @01@ - @12@+-- [@%k@] hour of day (24-hour), space-padded to two chars, @ 0@ - @23@ ----- [@%k@] hour, 24-hour, leading space as needed, @ 0@ - @23@+-- [@%I@] hour of day-half (12-hour), 0-padded to two chars, @01@ - @12@ ----- [@%l@] hour, 12-hour, leading space as needed, @ 1@ - @12@+-- [@%l@] hour of day-half (12-hour), space-padded to two chars, @ 1@ - @12@ ----- [@%M@] minute, @00@ - @59@+-- [@%M@] minute of hour, 0-padded to two chars, @00@ - @59@ ----- [@%S@] second, without decimal part, @00@ - @60@+-- [@%S@] second of minute (without decimal part), 0-padded to two chars, @00@ - @60@ ----- [@%q@] picosecond, including trailing zeros, @000000000000@ - @999999999999@.+-- [@%q@] picosecond of second, 0-padded to twelve chars, @000000000000@ - @999999999999@. ----- [@%Q@] decimal point and up to 12 second decimals, without trailing zeros.+-- [@%Q@] decimal point and fraction of second, up to 12 second decimals, without trailing zeros. -- For a whole number of seconds, @%Q@ produces the empty string. -- -- For 'UTCTime' and 'ZonedTime':@@ -109,43 +109,43 @@ -- -- [@%x@] as 'dateFmt' @locale@ (e.g. @%m\/%d\/%y@) ----- [@%Y@] year+-- [@%Y@] year, no padding. Note @%0y@ and @%_y@ pad to four chars ----- [@%y@] last two digits of year, @00@ - @99@+-- [@%y@] year of century, 0-padded to two chars, @00@ - @99@ ----- [@%C@] century (being the first two digits of the year), @00@ - @99@+-- [@%C@] century, no padding. Note @%0C@ and @%_C@ pad to two chars -- -- [@%B@] month name, long form ('fst' from 'months' @locale@), @January@ - @December@ -- -- [@%b@, @%h@] month name, short form ('snd' from 'months' @locale@), @Jan@ - @Dec@ ----- [@%m@] month of year, leading 0 as needed, @01@ - @12@+-- [@%m@] month of year, 0-padded to two chars, @01@ - @12@ ----- [@%d@] day of month, leading 0 as needed, @01@ - @31@+-- [@%d@] day of month, 0-padded to two chars, @01@ - @31@ ----- [@%e@] day of month, leading space as needed, @ 1@ - @31@+-- [@%e@] day of month, space-padded to two chars, @ 1@ - @31@ ----- [@%j@] day of year for Ordinal Date format, @001@ - @366@+-- [@%j@] day of year, 0-padded to three chars, @001@ - @366@ ----- [@%G@] year for Week Date format+-- [@%G@] year for Week Date format, no padding. Note @%0G@ and @%_G@ pad to four chars ----- [@%g@] last two digits of year for Week Date format, @00@ - @99@+-- [@%g@] year of century for Week Date format, 0-padded to two chars, @00@ - @99@ ----- [@%f@] century (first two digits of year) for Week Date format, @00@ - @99@+-- [@%f@] century for Week Date format, no padding. Note @%0f@ and @%_f@ pad to two chars ----- [@%V@] week for Week Date format, @01@ - @53@+-- [@%V@] week of year for Week Date format, 0-padded to two chars, @01@ - @53@ ----- [@%u@] day for Week Date format, @1@ - @7@+-- [@%u@] day of week for Week Date format, @1@ - @7@ -- -- [@%a@] day of week, short form ('snd' from 'wDays' @locale@), @Sun@ - @Sat@ -- -- [@%A@] day of week, long form ('fst' from 'wDays' @locale@), @Sunday@ - @Saturday@ ----- [@%U@] week number of year, where weeks start on Sunday (as 'sundayStartWeek'), @00@ - @53@+-- [@%U@] week of year where weeks start on Sunday (as 'sundayStartWeek'), 0-padded to two chars, @00@ - @53@ -- -- [@%w@] day of week number, @0@ (= Sunday) - @6@ (= Saturday) ----- [@%W@] week number of year, where weeks start on Monday (as 'mondayStartWeek'), @00@ - @53@+-- [@%W@] week of year where weeks start on Monday (as 'mondayStartWeek'), 0-padded to two chars, @00@ - @53@ formatTime :: (FormatTime t) => TimeLocale -> String -> t -> String formatTime _ [] _ = "" formatTime locale ('%':'_':c:cs) t = (formatChar c locale (Just (Just ' ')) t) ++ (formatTime locale cs t)@@ -211,9 +211,9 @@ formatCharacter 'x' = Just (\locale _ -> formatTime locale (dateFmt locale)) -- Year Count- formatCharacter 'Y' = Just (\_ _ -> show . fst . toOrdinalDate)+ formatCharacter 'Y' = Just (\_ opt -> (show4 (fromMaybe Nothing opt)) . fst . toOrdinalDate) formatCharacter 'y' = Just (\_ opt -> (show2 (fromMaybe (Just '0') opt)) . mod100 . fst . toOrdinalDate)- formatCharacter 'C' = Just (\_ opt -> (show2 (fromMaybe (Just '0') opt)) . div100 . fst . toOrdinalDate)+ formatCharacter 'C' = Just (\_ opt -> (show2 (fromMaybe Nothing opt)) . div100 . fst . toOrdinalDate) -- Month of Year formatCharacter 'B' = Just (\locale _ -> fst . (\(_,m,_) -> (months locale) !! (m - 1)) . toGregorian) formatCharacter 'b' = Just (\locale _ -> snd . (\(_,m,_) -> (months locale) !! (m - 1)) . toGregorian)@@ -226,9 +226,9 @@ formatCharacter 'j' = Just (\_ opt -> (show3 (fromMaybe (Just '0') opt)) . snd . toOrdinalDate) -- ISO 8601 Week Date- formatCharacter 'G' = Just (\_ _ -> show . (\(y,_,_) -> y) . toWeekDate)+ formatCharacter 'G' = Just (\_ opt -> (show4 (fromMaybe Nothing opt)) . (\(y,_,_) -> y) . toWeekDate) formatCharacter 'g' = Just (\_ opt -> (show2 (fromMaybe (Just '0') opt)) . mod100 . (\(y,_,_) -> y) . toWeekDate)- formatCharacter 'f' = Just (\_ opt -> (show2 (fromMaybe (Just '0') opt)) . div100 . (\(y,_,_) -> y) . toWeekDate)+ formatCharacter 'f' = Just (\_ opt -> (show2 (fromMaybe Nothing opt)) . div100 . (\(y,_,_) -> y) . toWeekDate) formatCharacter 'V' = Just (\_ opt -> (show2 (fromMaybe (Just '0') opt)) . (\(_,w,_) -> w) . toWeekDate) formatCharacter 'u' = Just (\_ _ -> show . (\(_,_,d) -> d) . toWeekDate)
Data/Time/Format/Parse.hs view
@@ -71,15 +71,23 @@ -- -- [@%Z@] accepts any string of letters, or any of the formats accepted by @%z@. --+-- [@%0Y@] accepts exactly four digits.+--+-- [@%0G@] accepts exactly four digits.+--+-- [@%0C@] accepts exactly two digits.+--+-- [@%0f@] accepts exactly two digits.+-- parseTime :: ParseTime t => TimeLocale -- ^ Time locale. -> String -- ^ Format string. -> String -- ^ Input string. -> Maybe t -- ^ The time value, or 'Nothing' if the input could -- not be parsed using the given format.-parseTime l fmt s = case readsTime l fmt s of- [(t,r)] | all isSpace r -> Just t- _ -> Nothing+parseTime l fmt s = case goodReadsTime l fmt s of+ [t] -> Just t+ _ -> Nothing -- | Parse a time value given a format string. Fails if the input could -- not be parsed using the given format. See 'parseTime' for details.@@ -88,11 +96,18 @@ -> String -- ^ Format string. -> String -- ^ Input string. -> t -- ^ The time value.-readTime l fmt s = case readsTime l fmt s of- [(t,r)] | all isSpace r -> t- [(_,x)] -> error $ "readTime: junk at end of " ++ show x- _ -> error $ "readsTime: bad input " ++ show s+readTime l fmt s = case goodReadsTime l fmt s of+ [t] -> t+ [] -> error $ "readTime: no parse of " ++ show s+ _ -> error $ "readTime: multiple parses of " ++ show s +goodReadsTime :: ParseTime t =>+ TimeLocale -- ^ Time locale.+ -> String -- ^ Format string+ -> String -- ^ Input string.+ -> [t]+goodReadsTime l fmt s = [t | (t,r) <- readsTime l fmt s, all isSpace r]+ -- | Parse a time value given a format string. See 'parseTime' for details. readsTime :: ParseTime t => TimeLocale -- ^ Time locale.@@ -137,63 +152,99 @@ pc mpad c = [Value mpad c] parseInput :: TimeLocale -> DateFormat -> ReadP [(Char,String)]-parseInput l = liftM catMaybes . mapM p- where p (Value mpad c) = parseValue l mpad c >>= return . Just . (,) c- p WhiteSpace = skipSpaces >> return Nothing- p (Literal c) = char c >> return Nothing+parseInput _ [] = return []+parseInput l (Value mpad c:ff) = do+ s <- parseValue l mpad c+ r <- parseInput l ff+ return ((c,s):r)+parseInput l (Literal c:ff) = do+ _ <- char c+ parseInput l ff+parseInput l (WhiteSpace:ff) = do+ _ <- satisfy isSpace+ case ff of+ (WhiteSpace:_) -> return ()+ _ -> skipSpaces+ parseInput l ff -- | Get the string corresponding to the given format specifier. parseValue :: TimeLocale -> Maybe Padding -> Char -> ReadP String parseValue l mpad c = case c of- 'z' -> numericTZ- 'Z' -> munch1 isAlpha <++- numericTZ <++- return "" -- produced by %Z for LocalTime- 'P' -> oneOf (let (am,pm) = amPm l in [am, pm])- 'p' -> oneOf (let (am,pm) = amPm l in [am, pm])- 'H' -> digits ZeroPadding 2- 'I' -> digits ZeroPadding 2- 'k' -> digits SpacePadding 2- 'l' -> digits SpacePadding 2- 'M' -> digits ZeroPadding 2 - 'S' -> digits ZeroPadding 2- 'q' -> digits ZeroPadding 12- 'Q' -> liftM2 (:) (char '.') (munch isDigit) <++ return ""- 's' -> (char '-' >> liftM ('-':) (munch1 isDigit)) - <++ munch1 isDigit- 'Y' -> digits ZeroPadding 4+ -- century+ 'C' -> digits SpacePadding 2+ 'f' -> digits SpacePadding 2++ -- year+ 'Y' -> digits SpacePadding 4+ 'G' -> digits SpacePadding 4+ + -- year of century 'y' -> digits ZeroPadding 2- 'C' -> digits ZeroPadding 2+ 'g' -> digits ZeroPadding 2++ -- month of year 'B' -> oneOf (map fst (months l)) 'b' -> oneOf (map snd (months l)) 'm' -> digits ZeroPadding 2+ + -- day of month 'd' -> digits ZeroPadding 2 'e' -> digits SpacePadding 2- 'j' -> digits ZeroPadding 3- 'G' -> digits ZeroPadding 4- 'g' -> digits ZeroPadding 2- 'f' -> digits ZeroPadding 2+ + -- week of year 'V' -> digits ZeroPadding 2+ 'U' -> digits ZeroPadding 2+ 'W' -> digits ZeroPadding 2+ + -- day of week 'u' -> oneOf $ map (:[]) ['1'..'7'] 'a' -> oneOf (map snd (wDays l)) 'A' -> oneOf (map fst (wDays l))- 'U' -> digits ZeroPadding 2 'w' -> oneOf $ map (:[]) ['0'..'6']- 'W' -> digits ZeroPadding 2+ + -- day of year+ 'j' -> digits ZeroPadding 3++ -- dayhalf of day (i.e. AM or PM)+ 'P' -> oneOf (let (am,pm) = amPm l in [am, pm])+ 'p' -> oneOf (let (am,pm) = amPm l in [am, pm])++ -- hour of day (i.e. 24h)+ 'H' -> digits ZeroPadding 2+ 'k' -> digits SpacePadding 2+ + -- hour of dayhalf (i.e. 12h)+ 'I' -> digits ZeroPadding 2+ 'l' -> digits SpacePadding 2+ + -- minute of hour+ 'M' -> digits ZeroPadding 2+ + -- second of minute+ 'S' -> digits ZeroPadding 2+ + -- picosecond of second+ 'q' -> digits ZeroPadding 12+ 'Q' -> liftM2 (:) (char '.') (munch isDigit) <++ return ""++ -- time zone+ 'z' -> numericTZ+ 'Z' -> munch1 isAlpha <+++ numericTZ <+++ return "" -- produced by %Z for LocalTime++ -- seconds since epoch+ 's' -> (char '-' >> liftM ('-':) (munch1 isDigit)) + <++ munch1 isDigit+ _ -> fail $ "Unknown format character: " ++ show c where oneOf = choice . map string digitsforce ZeroPadding n = count n (satisfy isDigit)- digitsforce SpacePadding n = skipSpaces >> oneUpTo n (satisfy isDigit)- digitsforce NoPadding n = oneUpTo n (satisfy isDigit)+ digitsforce SpacePadding _n = skipSpaces >> many1 (satisfy isDigit)+ digitsforce NoPadding _n = many1 (satisfy isDigit) digits pad = digitsforce (fromMaybe pad mpad)- oneUpTo :: Int -> ReadP a -> ReadP [a]- oneUpTo 0 _ = pfail- oneUpTo n x = liftM2 (:) x (upTo (n-1) x)- upTo :: Int -> ReadP a -> ReadP [a]- upTo 0 _ = return []- upTo n x = (oneUpTo n x) <++ return [] numericTZ = do s <- choice [char '+', char '-'] h <- digitsforce ZeroPadding 2 optional (char ':')@@ -205,13 +256,13 @@ -- * Instances for the time package types -- -data DayComponent = Year Integer -- 0-99, last two digits of both real years and week years- | Century Integer -- century of all years- | Month Int -- 1-12- | Day Int -- 1-31+data DayComponent = Century Integer -- century of all years+ | CenturyYear Integer -- 0-99, last two digits of both real years and week years+ | YearMonth Int -- 1-12+ | MonthDay Int -- 1-31 | YearDay Int -- 1-366 | WeekDay Int -- 1-7 (mon-sun)- | Week WeekType Int -- 1-53 or 0-53+ | YearWeek WeekType Int -- 1-53 or 0-53 data WeekType = ISOWeek | SundayWeek | MondayWeek @@ -220,63 +271,63 @@ where f c x = case c of+ -- %C: century (all but the last two digits of the year), 00 - 99+ 'C' -> [Century (read x)]+ -- %f century (all but the last two digits of the year), 00 - 99+ 'f' -> [Century (read x)] -- %Y: year- 'Y' -> let y = read x in [Century (y `div` 100), Year (y `mod` 100)]+ 'Y' -> let y = read x in [Century (y `div` 100), CenturyYear (y `mod` 100)]+ -- %G: year for Week Date format+ 'G' -> let y = read x in [Century (y `div` 100), CenturyYear (y `mod` 100)] -- %y: last two digits of year, 00 - 99- 'y' -> [Year (read x)]- -- %C: century (being the first two digits of the year), 00 - 99- 'C' -> [Century (read x)]+ 'y' -> [CenturyYear (read x)]+ -- %g: last two digits of year for Week Date format, 00 - 99+ 'g' -> [CenturyYear (read x)] -- %B: month name, long form (fst from months locale), January - December- 'B' -> [Month (1 + fromJust (elemIndex (up x) (map (up . fst) (months l))))]+ 'B' -> [YearMonth (1 + fromJust (elemIndex (up x) (map (up . fst) (months l))))] -- %b: month name, short form (snd from months locale), Jan - Dec- 'b' -> [Month (1 + fromJust (elemIndex (up x) (map (up . snd) (months l))))]+ 'b' -> [YearMonth (1 + fromJust (elemIndex (up x) (map (up . snd) (months l))))] -- %m: month of year, leading 0 as needed, 01 - 12- 'm' -> [Month (read x)]+ 'm' -> [YearMonth (read x)] -- %d: day of month, leading 0 as needed, 01 - 31- 'd' -> [Day (read x)]+ 'd' -> [MonthDay (read x)] -- %e: day of month, leading space as needed, 1 - 31- 'e' -> [Day (read x)]- -- %j: day of year for Ordinal Date format, 001 - 366- 'j' -> [YearDay (read x)]- -- %G: year for Week Date format- 'G' -> let y = read x in [Century (y `div` 100), Year (y `mod` 100)]- -- %g: last two digits of year for Week Date format, 00 - 99- 'g' -> [Year (read x)]- -- %f century (first two digits of year) for Week Date format, 00 - 99- 'f' -> [Century (read x)]+ 'e' -> [MonthDay (read x)] -- %V: week for Week Date format, 01 - 53- 'V' -> [Week ISOWeek (read x)]+ 'V' -> [YearWeek ISOWeek (read x)]+ -- %U: week number of year, where weeks start on Sunday (as sundayStartWeek), 01 - 53+ 'U' -> [YearWeek SundayWeek (read x)]+ -- %W: week number of year, where weeks start on Monday (as mondayStartWeek), 01 - 53+ 'W' -> [YearWeek MondayWeek (read x)] -- %u: day for Week Date format, 1 - 7 'u' -> [WeekDay (read x)] -- %a: day of week, short form (snd from wDays locale), Sun - Sat 'a' -> [WeekDay (1 + (fromJust (elemIndex (up x) (map (up . snd) (wDays l))) + 6) `mod` 7)] -- %A: day of week, long form (fst from wDays locale), Sunday - Saturday 'A' -> [WeekDay (1 + (fromJust (elemIndex (up x) (map (up . fst) (wDays l))) + 6) `mod` 7)]- -- %U: week number of year, where weeks start on Sunday (as sundayStartWeek), 01 - 53- 'U' -> [Week SundayWeek (read x)] -- %w: day of week number, 0 (= Sunday) - 6 (= Saturday) 'w' -> [WeekDay (((read x + 6) `mod` 7) + 1)]- -- %W: week number of year, where weeks start on Monday (as mondayStartWeek), 01 - 53- 'W' -> [Week MondayWeek (read x)]+ -- %j: day of year for Ordinal Date format, 001 - 366+ 'j' -> [YearDay (read x)] _ -> [] buildDay cs = rest cs where y = let - d = safeLast 70 [x | Year x <- cs]+ d = safeLast 70 [x | CenturyYear x <- cs] c = safeLast (if d >= 69 then 19 else 20) [x | Century x <- cs] in 100 * c + d - rest (Month m:_) = let d = safeLast 1 [x | Day x <- cs]+ rest (YearMonth m:_) = let d = safeLast 1 [x | MonthDay x <- cs] in fromGregorian y m d rest (YearDay d:_) = fromOrdinalDate y d- rest (Week wt w:_) = let d = safeLast 4 [x | WeekDay x <- cs]+ rest (YearWeek wt w:_) = let d = safeLast 4 [x | WeekDay x <- cs] in case wt of ISOWeek -> fromWeekDate y w d SundayWeek -> fromSundayStartWeek y w (d `mod` 7) MondayWeek -> fromMondayStartWeek y w d rest (_:xs) = rest xs- rest [] = rest [Month 1]+ rest [] = rest [YearMonth 1] safeLast x xs = last (x:xs) @@ -373,6 +424,7 @@ h = read [h1,h2] m = read [m1,m2] +-- Dubious _TIMEZONES_ :: [(String, (Int, Bool))] _TIMEZONES_ = -- New Zealand Daylight-Saving Time
Data/Time/LocalTime/LocalTime.hs view
@@ -44,7 +44,7 @@ rnf (LocalTime d t) = d `deepseq` t `deepseq` () instance Typeable LocalTime where- typeOf _ = mkTyConApp (mkTyCon "Data.Time.LocalTime.LocalTime.LocalTime") []+ typeOf _ = mkTyConApp (mkTyCon3 "time" "Data.Time.LocalTime.LocalTime" "LocalTime") [] instance Show LocalTime where show (LocalTime d t) = (showGregorian d) ++ " " ++ (show t)@@ -87,7 +87,7 @@ rnf (ZonedTime lt z) = lt `deepseq` z `deepseq` () instance Typeable ZonedTime where- typeOf _ = mkTyConApp (mkTyCon "Data.Time.LocalTime.LocalTime.ZonedTime") []+ typeOf _ = mkTyConApp (mkTyCon3 "time" "Data.Time.LocalTime.LocalTime" "ZonedTime") [] utcToZonedTime :: TimeZone -> UTCTime -> ZonedTime utcToZonedTime zone time = ZonedTime (utcToLocalTime zone time) zone
Data/Time/LocalTime/TimeOfDay.hs view
@@ -43,7 +43,7 @@ rnf (TimeOfDay h m s) = h `deepseq` m `deepseq` s `seq` () -- FIXME: Data.Fixed had no NFData instances yet at time of writing instance Typeable TimeOfDay where- typeOf _ = mkTyConApp (mkTyCon "Data.Time.LocalTime.TimeOfDay.TimeOfDay") []+ typeOf _ = mkTyConApp (mkTyCon3 "time" "Data.Time.LocalTime.TimeOfDay" "TimeOfDay") [] -- | Hour zero midnight :: TimeOfDay
Data/Time/LocalTime/TimeZone.hs view
@@ -45,7 +45,7 @@ rnf (TimeZone m so n) = m `deepseq` so `deepseq` n `deepseq` () instance Typeable TimeZone where- typeOf _ = mkTyConApp (mkTyCon "Data.Time.LocalTime.TimeZone.TimeZone") []+ typeOf _ = mkTyConApp (mkTyCon3 "time" "Data.Time.LocalTime.TimeZone" "TimeZone") [] -- | Create a nameless non-summer timezone for this number of minutes minutesToTimeZone :: Int -> TimeZone
Setup.hs view
@@ -1,26 +1,2 @@-module Main (main) where--import Control.Exception-import Distribution.PackageDescription import Distribution.Simple-import Distribution.Simple.LocalBuildInfo-import Distribution.Simple.Utils-import System.Cmd-import System.Directory-import System.Info--main :: IO ()-main = case os of- "windows" -> defaultMain- "mingw32" -> defaultMain- _ -> let hooks = autoconfUserHooks { runTests = runTestScript } in defaultMainWithHooks hooks--withCurrentDirectory :: FilePath -> IO a -> IO a-withCurrentDirectory path f = do- cur <- getCurrentDirectory- setCurrentDirectory path- finally f (setCurrentDirectory cur)--runTestScript :: Args -> Bool -> PackageDescription -> LocalBuildInfo -> IO ()-runTestScript _args _flag _pd _lbi- = maybeExit $ withCurrentDirectory "test" $ system "make"+main = defaultMain
+ Test.hs view
@@ -0,0 +1,11 @@+module Main where+import Test.Framework+import Test.Tests+import Foreign.C.Types++main :: IO ()+main = do+ if (toRational (1000000000000 :: CTime)) /= (1000000000000 :: Rational)+ then putStrLn "WARNING: Some tests will incorrectly fail due to a 32-bit time_t C type."+ else return ()+ defaultMain tests
+ Test/AddDays.hs view
@@ -0,0 +1,41 @@+module Test.AddDays where++import Data.Time.Calendar+import Test.TestUtil+import Test.AddDaysRef++days ::[Day]+days =+ [+ fromGregorian 2005 2 28,+ fromGregorian 2004 2 29,+ fromGregorian 2004 1 31,+ fromGregorian 2004 12 31,+ fromGregorian 2005 7 1,+ fromGregorian 2005 4 21,+ fromGregorian 2005 6 30+ ]++increments :: [Integer]+increments = [-10,-4,-1,0,1,7,83]++adders :: [(String,Integer -> Day -> Day)]+adders =+ [+ ("day",addDays),+ ("month (clip)",addGregorianMonthsClip),+ ("month (roll over)",addGregorianMonthsRollOver),+ ("year (clip)",addGregorianYearsClip),+ ("year (roll over)",addGregorianYearsRollOver)+ ]++resultDays :: [String]+resultDays = do+ (aname,adder) <- adders+ increment <- increments+ day <- days+ return ((showGregorian day) ++ " + " ++ (show increment) ++ " * " ++ aname ++ " = " ++ showGregorian (adder increment day))++addDaysTest :: Test+addDaysTest = pureTest "addDays" $+ diff addDaysRef $ unlines resultDays
+ Test/AddDaysRef.hs view
@@ -0,0 +1,250 @@+module Test.AddDaysRef where++addDaysRef :: String+addDaysRef =+ unlines+ [ "2005-02-28 + -10 * day = 2005-02-18"+ , "2004-02-29 + -10 * day = 2004-02-19"+ , "2004-01-31 + -10 * day = 2004-01-21"+ , "2004-12-31 + -10 * day = 2004-12-21"+ , "2005-07-01 + -10 * day = 2005-06-21"+ , "2005-04-21 + -10 * day = 2005-04-11"+ , "2005-06-30 + -10 * day = 2005-06-20"+ , "2005-02-28 + -4 * day = 2005-02-24"+ , "2004-02-29 + -4 * day = 2004-02-25"+ , "2004-01-31 + -4 * day = 2004-01-27"+ , "2004-12-31 + -4 * day = 2004-12-27"+ , "2005-07-01 + -4 * day = 2005-06-27"+ , "2005-04-21 + -4 * day = 2005-04-17"+ , "2005-06-30 + -4 * day = 2005-06-26"+ , "2005-02-28 + -1 * day = 2005-02-27"+ , "2004-02-29 + -1 * day = 2004-02-28"+ , "2004-01-31 + -1 * day = 2004-01-30"+ , "2004-12-31 + -1 * day = 2004-12-30"+ , "2005-07-01 + -1 * day = 2005-06-30"+ , "2005-04-21 + -1 * day = 2005-04-20"+ , "2005-06-30 + -1 * day = 2005-06-29"+ , "2005-02-28 + 0 * day = 2005-02-28"+ , "2004-02-29 + 0 * day = 2004-02-29"+ , "2004-01-31 + 0 * day = 2004-01-31"+ , "2004-12-31 + 0 * day = 2004-12-31"+ , "2005-07-01 + 0 * day = 2005-07-01"+ , "2005-04-21 + 0 * day = 2005-04-21"+ , "2005-06-30 + 0 * day = 2005-06-30"+ , "2005-02-28 + 1 * day = 2005-03-01"+ , "2004-02-29 + 1 * day = 2004-03-01"+ , "2004-01-31 + 1 * day = 2004-02-01"+ , "2004-12-31 + 1 * day = 2005-01-01"+ , "2005-07-01 + 1 * day = 2005-07-02"+ , "2005-04-21 + 1 * day = 2005-04-22"+ , "2005-06-30 + 1 * day = 2005-07-01"+ , "2005-02-28 + 7 * day = 2005-03-07"+ , "2004-02-29 + 7 * day = 2004-03-07"+ , "2004-01-31 + 7 * day = 2004-02-07"+ , "2004-12-31 + 7 * day = 2005-01-07"+ , "2005-07-01 + 7 * day = 2005-07-08"+ , "2005-04-21 + 7 * day = 2005-04-28"+ , "2005-06-30 + 7 * day = 2005-07-07"+ , "2005-02-28 + 83 * day = 2005-05-22"+ , "2004-02-29 + 83 * day = 2004-05-22"+ , "2004-01-31 + 83 * day = 2004-04-23"+ , "2004-12-31 + 83 * day = 2005-03-24"+ , "2005-07-01 + 83 * day = 2005-09-22"+ , "2005-04-21 + 83 * day = 2005-07-13"+ , "2005-06-30 + 83 * day = 2005-09-21"+ , "2005-02-28 + -10 * month (clip) = 2004-04-28"+ , "2004-02-29 + -10 * month (clip) = 2003-04-29"+ , "2004-01-31 + -10 * month (clip) = 2003-03-31"+ , "2004-12-31 + -10 * month (clip) = 2004-02-29"+ , "2005-07-01 + -10 * month (clip) = 2004-09-01"+ , "2005-04-21 + -10 * month (clip) = 2004-06-21"+ , "2005-06-30 + -10 * month (clip) = 2004-08-30"+ , "2005-02-28 + -4 * month (clip) = 2004-10-28"+ , "2004-02-29 + -4 * month (clip) = 2003-10-29"+ , "2004-01-31 + -4 * month (clip) = 2003-09-30"+ , "2004-12-31 + -4 * month (clip) = 2004-08-31"+ , "2005-07-01 + -4 * month (clip) = 2005-03-01"+ , "2005-04-21 + -4 * month (clip) = 2004-12-21"+ , "2005-06-30 + -4 * month (clip) = 2005-02-28"+ , "2005-02-28 + -1 * month (clip) = 2005-01-28"+ , "2004-02-29 + -1 * month (clip) = 2004-01-29"+ , "2004-01-31 + -1 * month (clip) = 2003-12-31"+ , "2004-12-31 + -1 * month (clip) = 2004-11-30"+ , "2005-07-01 + -1 * month (clip) = 2005-06-01"+ , "2005-04-21 + -1 * month (clip) = 2005-03-21"+ , "2005-06-30 + -1 * month (clip) = 2005-05-30"+ , "2005-02-28 + 0 * month (clip) = 2005-02-28"+ , "2004-02-29 + 0 * month (clip) = 2004-02-29"+ , "2004-01-31 + 0 * month (clip) = 2004-01-31"+ , "2004-12-31 + 0 * month (clip) = 2004-12-31"+ , "2005-07-01 + 0 * month (clip) = 2005-07-01"+ , "2005-04-21 + 0 * month (clip) = 2005-04-21"+ , "2005-06-30 + 0 * month (clip) = 2005-06-30"+ , "2005-02-28 + 1 * month (clip) = 2005-03-28"+ , "2004-02-29 + 1 * month (clip) = 2004-03-29"+ , "2004-01-31 + 1 * month (clip) = 2004-02-29"+ , "2004-12-31 + 1 * month (clip) = 2005-01-31"+ , "2005-07-01 + 1 * month (clip) = 2005-08-01"+ , "2005-04-21 + 1 * month (clip) = 2005-05-21"+ , "2005-06-30 + 1 * month (clip) = 2005-07-30"+ , "2005-02-28 + 7 * month (clip) = 2005-09-28"+ , "2004-02-29 + 7 * month (clip) = 2004-09-29"+ , "2004-01-31 + 7 * month (clip) = 2004-08-31"+ , "2004-12-31 + 7 * month (clip) = 2005-07-31"+ , "2005-07-01 + 7 * month (clip) = 2006-02-01"+ , "2005-04-21 + 7 * month (clip) = 2005-11-21"+ , "2005-06-30 + 7 * month (clip) = 2006-01-30"+ , "2005-02-28 + 83 * month (clip) = 2012-01-28"+ , "2004-02-29 + 83 * month (clip) = 2011-01-29"+ , "2004-01-31 + 83 * month (clip) = 2010-12-31"+ , "2004-12-31 + 83 * month (clip) = 2011-11-30"+ , "2005-07-01 + 83 * month (clip) = 2012-06-01"+ , "2005-04-21 + 83 * month (clip) = 2012-03-21"+ , "2005-06-30 + 83 * month (clip) = 2012-05-30"+ , "2005-02-28 + -10 * month (roll over) = 2004-04-28"+ , "2004-02-29 + -10 * month (roll over) = 2003-04-29"+ , "2004-01-31 + -10 * month (roll over) = 2003-03-31"+ , "2004-12-31 + -10 * month (roll over) = 2004-03-02"+ , "2005-07-01 + -10 * month (roll over) = 2004-09-01"+ , "2005-04-21 + -10 * month (roll over) = 2004-06-21"+ , "2005-06-30 + -10 * month (roll over) = 2004-08-30"+ , "2005-02-28 + -4 * month (roll over) = 2004-10-28"+ , "2004-02-29 + -4 * month (roll over) = 2003-10-29"+ , "2004-01-31 + -4 * month (roll over) = 2003-10-01"+ , "2004-12-31 + -4 * month (roll over) = 2004-08-31"+ , "2005-07-01 + -4 * month (roll over) = 2005-03-01"+ , "2005-04-21 + -4 * month (roll over) = 2004-12-21"+ , "2005-06-30 + -4 * month (roll over) = 2005-03-02"+ , "2005-02-28 + -1 * month (roll over) = 2005-01-28"+ , "2004-02-29 + -1 * month (roll over) = 2004-01-29"+ , "2004-01-31 + -1 * month (roll over) = 2003-12-31"+ , "2004-12-31 + -1 * month (roll over) = 2004-12-01"+ , "2005-07-01 + -1 * month (roll over) = 2005-06-01"+ , "2005-04-21 + -1 * month (roll over) = 2005-03-21"+ , "2005-06-30 + -1 * month (roll over) = 2005-05-30"+ , "2005-02-28 + 0 * month (roll over) = 2005-02-28"+ , "2004-02-29 + 0 * month (roll over) = 2004-02-29"+ , "2004-01-31 + 0 * month (roll over) = 2004-01-31"+ , "2004-12-31 + 0 * month (roll over) = 2004-12-31"+ , "2005-07-01 + 0 * month (roll over) = 2005-07-01"+ , "2005-04-21 + 0 * month (roll over) = 2005-04-21"+ , "2005-06-30 + 0 * month (roll over) = 2005-06-30"+ , "2005-02-28 + 1 * month (roll over) = 2005-03-28"+ , "2004-02-29 + 1 * month (roll over) = 2004-03-29"+ , "2004-01-31 + 1 * month (roll over) = 2004-03-02"+ , "2004-12-31 + 1 * month (roll over) = 2005-01-31"+ , "2005-07-01 + 1 * month (roll over) = 2005-08-01"+ , "2005-04-21 + 1 * month (roll over) = 2005-05-21"+ , "2005-06-30 + 1 * month (roll over) = 2005-07-30"+ , "2005-02-28 + 7 * month (roll over) = 2005-09-28"+ , "2004-02-29 + 7 * month (roll over) = 2004-09-29"+ , "2004-01-31 + 7 * month (roll over) = 2004-08-31"+ , "2004-12-31 + 7 * month (roll over) = 2005-07-31"+ , "2005-07-01 + 7 * month (roll over) = 2006-02-01"+ , "2005-04-21 + 7 * month (roll over) = 2005-11-21"+ , "2005-06-30 + 7 * month (roll over) = 2006-01-30"+ , "2005-02-28 + 83 * month (roll over) = 2012-01-28"+ , "2004-02-29 + 83 * month (roll over) = 2011-01-29"+ , "2004-01-31 + 83 * month (roll over) = 2010-12-31"+ , "2004-12-31 + 83 * month (roll over) = 2011-12-01"+ , "2005-07-01 + 83 * month (roll over) = 2012-06-01"+ , "2005-04-21 + 83 * month (roll over) = 2012-03-21"+ , "2005-06-30 + 83 * month (roll over) = 2012-05-30"+ , "2005-02-28 + -10 * year (clip) = 1995-02-28"+ , "2004-02-29 + -10 * year (clip) = 1994-02-28"+ , "2004-01-31 + -10 * year (clip) = 1994-01-31"+ , "2004-12-31 + -10 * year (clip) = 1994-12-31"+ , "2005-07-01 + -10 * year (clip) = 1995-07-01"+ , "2005-04-21 + -10 * year (clip) = 1995-04-21"+ , "2005-06-30 + -10 * year (clip) = 1995-06-30"+ , "2005-02-28 + -4 * year (clip) = 2001-02-28"+ , "2004-02-29 + -4 * year (clip) = 2000-02-29"+ , "2004-01-31 + -4 * year (clip) = 2000-01-31"+ , "2004-12-31 + -4 * year (clip) = 2000-12-31"+ , "2005-07-01 + -4 * year (clip) = 2001-07-01"+ , "2005-04-21 + -4 * year (clip) = 2001-04-21"+ , "2005-06-30 + -4 * year (clip) = 2001-06-30"+ , "2005-02-28 + -1 * year (clip) = 2004-02-28"+ , "2004-02-29 + -1 * year (clip) = 2003-02-28"+ , "2004-01-31 + -1 * year (clip) = 2003-01-31"+ , "2004-12-31 + -1 * year (clip) = 2003-12-31"+ , "2005-07-01 + -1 * year (clip) = 2004-07-01"+ , "2005-04-21 + -1 * year (clip) = 2004-04-21"+ , "2005-06-30 + -1 * year (clip) = 2004-06-30"+ , "2005-02-28 + 0 * year (clip) = 2005-02-28"+ , "2004-02-29 + 0 * year (clip) = 2004-02-29"+ , "2004-01-31 + 0 * year (clip) = 2004-01-31"+ , "2004-12-31 + 0 * year (clip) = 2004-12-31"+ , "2005-07-01 + 0 * year (clip) = 2005-07-01"+ , "2005-04-21 + 0 * year (clip) = 2005-04-21"+ , "2005-06-30 + 0 * year (clip) = 2005-06-30"+ , "2005-02-28 + 1 * year (clip) = 2006-02-28"+ , "2004-02-29 + 1 * year (clip) = 2005-02-28"+ , "2004-01-31 + 1 * year (clip) = 2005-01-31"+ , "2004-12-31 + 1 * year (clip) = 2005-12-31"+ , "2005-07-01 + 1 * year (clip) = 2006-07-01"+ , "2005-04-21 + 1 * year (clip) = 2006-04-21"+ , "2005-06-30 + 1 * year (clip) = 2006-06-30"+ , "2005-02-28 + 7 * year (clip) = 2012-02-28"+ , "2004-02-29 + 7 * year (clip) = 2011-02-28"+ , "2004-01-31 + 7 * year (clip) = 2011-01-31"+ , "2004-12-31 + 7 * year (clip) = 2011-12-31"+ , "2005-07-01 + 7 * year (clip) = 2012-07-01"+ , "2005-04-21 + 7 * year (clip) = 2012-04-21"+ , "2005-06-30 + 7 * year (clip) = 2012-06-30"+ , "2005-02-28 + 83 * year (clip) = 2088-02-28"+ , "2004-02-29 + 83 * year (clip) = 2087-02-28"+ , "2004-01-31 + 83 * year (clip) = 2087-01-31"+ , "2004-12-31 + 83 * year (clip) = 2087-12-31"+ , "2005-07-01 + 83 * year (clip) = 2088-07-01"+ , "2005-04-21 + 83 * year (clip) = 2088-04-21"+ , "2005-06-30 + 83 * year (clip) = 2088-06-30"+ , "2005-02-28 + -10 * year (roll over) = 1995-02-28"+ , "2004-02-29 + -10 * year (roll over) = 1994-03-01"+ , "2004-01-31 + -10 * year (roll over) = 1994-01-31"+ , "2004-12-31 + -10 * year (roll over) = 1994-12-31"+ , "2005-07-01 + -10 * year (roll over) = 1995-07-01"+ , "2005-04-21 + -10 * year (roll over) = 1995-04-21"+ , "2005-06-30 + -10 * year (roll over) = 1995-06-30"+ , "2005-02-28 + -4 * year (roll over) = 2001-02-28"+ , "2004-02-29 + -4 * year (roll over) = 2000-02-29"+ , "2004-01-31 + -4 * year (roll over) = 2000-01-31"+ , "2004-12-31 + -4 * year (roll over) = 2000-12-31"+ , "2005-07-01 + -4 * year (roll over) = 2001-07-01"+ , "2005-04-21 + -4 * year (roll over) = 2001-04-21"+ , "2005-06-30 + -4 * year (roll over) = 2001-06-30"+ , "2005-02-28 + -1 * year (roll over) = 2004-02-28"+ , "2004-02-29 + -1 * year (roll over) = 2003-03-01"+ , "2004-01-31 + -1 * year (roll over) = 2003-01-31"+ , "2004-12-31 + -1 * year (roll over) = 2003-12-31"+ , "2005-07-01 + -1 * year (roll over) = 2004-07-01"+ , "2005-04-21 + -1 * year (roll over) = 2004-04-21"+ , "2005-06-30 + -1 * year (roll over) = 2004-06-30"+ , "2005-02-28 + 0 * year (roll over) = 2005-02-28"+ , "2004-02-29 + 0 * year (roll over) = 2004-02-29"+ , "2004-01-31 + 0 * year (roll over) = 2004-01-31"+ , "2004-12-31 + 0 * year (roll over) = 2004-12-31"+ , "2005-07-01 + 0 * year (roll over) = 2005-07-01"+ , "2005-04-21 + 0 * year (roll over) = 2005-04-21"+ , "2005-06-30 + 0 * year (roll over) = 2005-06-30"+ , "2005-02-28 + 1 * year (roll over) = 2006-02-28"+ , "2004-02-29 + 1 * year (roll over) = 2005-03-01"+ , "2004-01-31 + 1 * year (roll over) = 2005-01-31"+ , "2004-12-31 + 1 * year (roll over) = 2005-12-31"+ , "2005-07-01 + 1 * year (roll over) = 2006-07-01"+ , "2005-04-21 + 1 * year (roll over) = 2006-04-21"+ , "2005-06-30 + 1 * year (roll over) = 2006-06-30"+ , "2005-02-28 + 7 * year (roll over) = 2012-02-28"+ , "2004-02-29 + 7 * year (roll over) = 2011-03-01"+ , "2004-01-31 + 7 * year (roll over) = 2011-01-31"+ , "2004-12-31 + 7 * year (roll over) = 2011-12-31"+ , "2005-07-01 + 7 * year (roll over) = 2012-07-01"+ , "2005-04-21 + 7 * year (roll over) = 2012-04-21"+ , "2005-06-30 + 7 * year (roll over) = 2012-06-30"+ , "2005-02-28 + 83 * year (roll over) = 2088-02-28"+ , "2004-02-29 + 83 * year (roll over) = 2087-03-01"+ , "2004-01-31 + 83 * year (roll over) = 2087-01-31"+ , "2004-12-31 + 83 * year (roll over) = 2087-12-31"+ , "2005-07-01 + 83 * year (roll over) = 2088-07-01"+ , "2005-04-21 + 83 * year (roll over) = 2088-04-21"+ , "2005-06-30 + 83 * year (roll over) = 2088-06-30" ]
+ Test/ClipDates.hs view
@@ -0,0 +1,46 @@+{-# Language TupleSections #-}++module Test.ClipDates where++import Data.Time.Calendar.OrdinalDate+import Data.Time.Calendar.WeekDate+import Data.Time.Calendar+import Test.TestUtil+import Test.ClipDatesRef++yearAndDay :: (Integer,Int) -> String+yearAndDay (y,d) = (show y) ++ "-" ++ (show d) ++ " = " ++ (showOrdinalDate (fromOrdinalDate y d))++gregorian :: (Integer,Int,Int) -> String+gregorian (y,m,d) = (show y) ++ "-" ++ (show m) ++ "-" ++ (show d) ++ " = " ++ (showGregorian (fromGregorian y m d))++iSOWeekDay :: (Integer,Int,Int) -> String+iSOWeekDay (y,w,d) = (show y) ++ "-W" ++ (show w) ++ "-" ++ (show d) ++ " = " ++ (showWeekDate (fromWeekDate y w d))++--++tupleUp2 :: [a] -> [b] -> [(a, b)]+tupleUp2 l1 l2 = concatMap (\e -> map (e,) l2) l1++tupleUp3 :: [a] -> [b] -> [c] -> [(a, b, c)]+tupleUp3 l1 l2 l3+ = let ts = tupleUp2 l2 l3+ in concatMap (\e -> map (\(f, g) -> (e, f, g)) ts) l1++--++clipDates :: Test+clipDates = pureTest "clipDates" $+ let + yad = unlines $ map yearAndDay $ + tupleUp2 [1968,1969,1971] [-4,0,1,200,364,365,366,367,700]+ ++ greg = unlines $ map gregorian $ + tupleUp3 [1968,1969,1971] [-20,-1,0,1,2,12,13,17] [-7,-1,0,1,2,27,28,29,30,31,32,40]++ iso = unlines $ map iSOWeekDay $ + tupleUp3 [1968,1969,2004] [-20,-1,0,1,20,51,52,53,54] [-2,-1,0,1,4,6,7,8,9]++ in diff clipDatesRef $ + concat [ "YearAndDay\n", yad, "Gregorian\n", greg, "ISOWeekDay\n", iso ]
+ Test/ClipDatesRef.hs view
@@ -0,0 +1,566 @@+module Test.ClipDatesRef where++clipDatesRef :: String+clipDatesRef =+ unlines + [ "YearAndDay"+ , "1968--4 = 1968-001"+ , "1968-0 = 1968-001"+ , "1968-1 = 1968-001"+ , "1968-200 = 1968-200"+ , "1968-364 = 1968-364"+ , "1968-365 = 1968-365"+ , "1968-366 = 1968-366"+ , "1968-367 = 1968-366"+ , "1968-700 = 1968-366"+ , "1969--4 = 1969-001"+ , "1969-0 = 1969-001"+ , "1969-1 = 1969-001"+ , "1969-200 = 1969-200"+ , "1969-364 = 1969-364"+ , "1969-365 = 1969-365"+ , "1969-366 = 1969-365"+ , "1969-367 = 1969-365"+ , "1969-700 = 1969-365"+ , "1971--4 = 1971-001"+ , "1971-0 = 1971-001"+ , "1971-1 = 1971-001"+ , "1971-200 = 1971-200"+ , "1971-364 = 1971-364"+ , "1971-365 = 1971-365"+ , "1971-366 = 1971-365"+ , "1971-367 = 1971-365"+ , "1971-700 = 1971-365"+ , "Gregorian"+ , "1968--20--7 = 1968-01-01"+ , "1968--20--1 = 1968-01-01"+ , "1968--20-0 = 1968-01-01"+ , "1968--20-1 = 1968-01-01"+ , "1968--20-2 = 1968-01-02"+ , "1968--20-27 = 1968-01-27"+ , "1968--20-28 = 1968-01-28"+ , "1968--20-29 = 1968-01-29"+ , "1968--20-30 = 1968-01-30"+ , "1968--20-31 = 1968-01-31"+ , "1968--20-32 = 1968-01-31"+ , "1968--20-40 = 1968-01-31"+ , "1968--1--7 = 1968-01-01"+ , "1968--1--1 = 1968-01-01"+ , "1968--1-0 = 1968-01-01"+ , "1968--1-1 = 1968-01-01"+ , "1968--1-2 = 1968-01-02"+ , "1968--1-27 = 1968-01-27"+ , "1968--1-28 = 1968-01-28"+ , "1968--1-29 = 1968-01-29"+ , "1968--1-30 = 1968-01-30"+ , "1968--1-31 = 1968-01-31"+ , "1968--1-32 = 1968-01-31"+ , "1968--1-40 = 1968-01-31"+ , "1968-0--7 = 1968-01-01"+ , "1968-0--1 = 1968-01-01"+ , "1968-0-0 = 1968-01-01"+ , "1968-0-1 = 1968-01-01"+ , "1968-0-2 = 1968-01-02"+ , "1968-0-27 = 1968-01-27"+ , "1968-0-28 = 1968-01-28"+ , "1968-0-29 = 1968-01-29"+ , "1968-0-30 = 1968-01-30"+ , "1968-0-31 = 1968-01-31"+ , "1968-0-32 = 1968-01-31"+ , "1968-0-40 = 1968-01-31"+ , "1968-1--7 = 1968-01-01"+ , "1968-1--1 = 1968-01-01"+ , "1968-1-0 = 1968-01-01"+ , "1968-1-1 = 1968-01-01"+ , "1968-1-2 = 1968-01-02"+ , "1968-1-27 = 1968-01-27"+ , "1968-1-28 = 1968-01-28"+ , "1968-1-29 = 1968-01-29"+ , "1968-1-30 = 1968-01-30"+ , "1968-1-31 = 1968-01-31"+ , "1968-1-32 = 1968-01-31"+ , "1968-1-40 = 1968-01-31"+ , "1968-2--7 = 1968-02-01"+ , "1968-2--1 = 1968-02-01"+ , "1968-2-0 = 1968-02-01"+ , "1968-2-1 = 1968-02-01"+ , "1968-2-2 = 1968-02-02"+ , "1968-2-27 = 1968-02-27"+ , "1968-2-28 = 1968-02-28"+ , "1968-2-29 = 1968-02-29"+ , "1968-2-30 = 1968-02-29"+ , "1968-2-31 = 1968-02-29"+ , "1968-2-32 = 1968-02-29"+ , "1968-2-40 = 1968-02-29"+ , "1968-12--7 = 1968-12-01"+ , "1968-12--1 = 1968-12-01"+ , "1968-12-0 = 1968-12-01"+ , "1968-12-1 = 1968-12-01"+ , "1968-12-2 = 1968-12-02"+ , "1968-12-27 = 1968-12-27"+ , "1968-12-28 = 1968-12-28"+ , "1968-12-29 = 1968-12-29"+ , "1968-12-30 = 1968-12-30"+ , "1968-12-31 = 1968-12-31"+ , "1968-12-32 = 1968-12-31"+ , "1968-12-40 = 1968-12-31"+ , "1968-13--7 = 1968-12-01"+ , "1968-13--1 = 1968-12-01"+ , "1968-13-0 = 1968-12-01"+ , "1968-13-1 = 1968-12-01"+ , "1968-13-2 = 1968-12-02"+ , "1968-13-27 = 1968-12-27"+ , "1968-13-28 = 1968-12-28"+ , "1968-13-29 = 1968-12-29"+ , "1968-13-30 = 1968-12-30"+ , "1968-13-31 = 1968-12-31"+ , "1968-13-32 = 1968-12-31"+ , "1968-13-40 = 1968-12-31"+ , "1968-17--7 = 1968-12-01"+ , "1968-17--1 = 1968-12-01"+ , "1968-17-0 = 1968-12-01"+ , "1968-17-1 = 1968-12-01"+ , "1968-17-2 = 1968-12-02"+ , "1968-17-27 = 1968-12-27"+ , "1968-17-28 = 1968-12-28"+ , "1968-17-29 = 1968-12-29"+ , "1968-17-30 = 1968-12-30"+ , "1968-17-31 = 1968-12-31"+ , "1968-17-32 = 1968-12-31"+ , "1968-17-40 = 1968-12-31"+ , "1969--20--7 = 1969-01-01"+ , "1969--20--1 = 1969-01-01"+ , "1969--20-0 = 1969-01-01"+ , "1969--20-1 = 1969-01-01"+ , "1969--20-2 = 1969-01-02"+ , "1969--20-27 = 1969-01-27"+ , "1969--20-28 = 1969-01-28"+ , "1969--20-29 = 1969-01-29"+ , "1969--20-30 = 1969-01-30"+ , "1969--20-31 = 1969-01-31"+ , "1969--20-32 = 1969-01-31"+ , "1969--20-40 = 1969-01-31"+ , "1969--1--7 = 1969-01-01"+ , "1969--1--1 = 1969-01-01"+ , "1969--1-0 = 1969-01-01"+ , "1969--1-1 = 1969-01-01"+ , "1969--1-2 = 1969-01-02"+ , "1969--1-27 = 1969-01-27"+ , "1969--1-28 = 1969-01-28"+ , "1969--1-29 = 1969-01-29"+ , "1969--1-30 = 1969-01-30"+ , "1969--1-31 = 1969-01-31"+ , "1969--1-32 = 1969-01-31"+ , "1969--1-40 = 1969-01-31"+ , "1969-0--7 = 1969-01-01"+ , "1969-0--1 = 1969-01-01"+ , "1969-0-0 = 1969-01-01"+ , "1969-0-1 = 1969-01-01"+ , "1969-0-2 = 1969-01-02"+ , "1969-0-27 = 1969-01-27"+ , "1969-0-28 = 1969-01-28"+ , "1969-0-29 = 1969-01-29"+ , "1969-0-30 = 1969-01-30"+ , "1969-0-31 = 1969-01-31"+ , "1969-0-32 = 1969-01-31"+ , "1969-0-40 = 1969-01-31"+ , "1969-1--7 = 1969-01-01"+ , "1969-1--1 = 1969-01-01"+ , "1969-1-0 = 1969-01-01"+ , "1969-1-1 = 1969-01-01"+ , "1969-1-2 = 1969-01-02"+ , "1969-1-27 = 1969-01-27"+ , "1969-1-28 = 1969-01-28"+ , "1969-1-29 = 1969-01-29"+ , "1969-1-30 = 1969-01-30"+ , "1969-1-31 = 1969-01-31"+ , "1969-1-32 = 1969-01-31"+ , "1969-1-40 = 1969-01-31"+ , "1969-2--7 = 1969-02-01"+ , "1969-2--1 = 1969-02-01"+ , "1969-2-0 = 1969-02-01"+ , "1969-2-1 = 1969-02-01"+ , "1969-2-2 = 1969-02-02"+ , "1969-2-27 = 1969-02-27"+ , "1969-2-28 = 1969-02-28"+ , "1969-2-29 = 1969-02-28"+ , "1969-2-30 = 1969-02-28"+ , "1969-2-31 = 1969-02-28"+ , "1969-2-32 = 1969-02-28"+ , "1969-2-40 = 1969-02-28"+ , "1969-12--7 = 1969-12-01"+ , "1969-12--1 = 1969-12-01"+ , "1969-12-0 = 1969-12-01"+ , "1969-12-1 = 1969-12-01"+ , "1969-12-2 = 1969-12-02"+ , "1969-12-27 = 1969-12-27"+ , "1969-12-28 = 1969-12-28"+ , "1969-12-29 = 1969-12-29"+ , "1969-12-30 = 1969-12-30"+ , "1969-12-31 = 1969-12-31"+ , "1969-12-32 = 1969-12-31"+ , "1969-12-40 = 1969-12-31"+ , "1969-13--7 = 1969-12-01"+ , "1969-13--1 = 1969-12-01"+ , "1969-13-0 = 1969-12-01"+ , "1969-13-1 = 1969-12-01"+ , "1969-13-2 = 1969-12-02"+ , "1969-13-27 = 1969-12-27"+ , "1969-13-28 = 1969-12-28"+ , "1969-13-29 = 1969-12-29"+ , "1969-13-30 = 1969-12-30"+ , "1969-13-31 = 1969-12-31"+ , "1969-13-32 = 1969-12-31"+ , "1969-13-40 = 1969-12-31"+ , "1969-17--7 = 1969-12-01"+ , "1969-17--1 = 1969-12-01"+ , "1969-17-0 = 1969-12-01"+ , "1969-17-1 = 1969-12-01"+ , "1969-17-2 = 1969-12-02"+ , "1969-17-27 = 1969-12-27"+ , "1969-17-28 = 1969-12-28"+ , "1969-17-29 = 1969-12-29"+ , "1969-17-30 = 1969-12-30"+ , "1969-17-31 = 1969-12-31"+ , "1969-17-32 = 1969-12-31"+ , "1969-17-40 = 1969-12-31"+ , "1971--20--7 = 1971-01-01"+ , "1971--20--1 = 1971-01-01"+ , "1971--20-0 = 1971-01-01"+ , "1971--20-1 = 1971-01-01"+ , "1971--20-2 = 1971-01-02"+ , "1971--20-27 = 1971-01-27"+ , "1971--20-28 = 1971-01-28"+ , "1971--20-29 = 1971-01-29"+ , "1971--20-30 = 1971-01-30"+ , "1971--20-31 = 1971-01-31"+ , "1971--20-32 = 1971-01-31"+ , "1971--20-40 = 1971-01-31"+ , "1971--1--7 = 1971-01-01"+ , "1971--1--1 = 1971-01-01"+ , "1971--1-0 = 1971-01-01"+ , "1971--1-1 = 1971-01-01"+ , "1971--1-2 = 1971-01-02"+ , "1971--1-27 = 1971-01-27"+ , "1971--1-28 = 1971-01-28"+ , "1971--1-29 = 1971-01-29"+ , "1971--1-30 = 1971-01-30"+ , "1971--1-31 = 1971-01-31"+ , "1971--1-32 = 1971-01-31"+ , "1971--1-40 = 1971-01-31"+ , "1971-0--7 = 1971-01-01"+ , "1971-0--1 = 1971-01-01"+ , "1971-0-0 = 1971-01-01"+ , "1971-0-1 = 1971-01-01"+ , "1971-0-2 = 1971-01-02"+ , "1971-0-27 = 1971-01-27"+ , "1971-0-28 = 1971-01-28"+ , "1971-0-29 = 1971-01-29"+ , "1971-0-30 = 1971-01-30"+ , "1971-0-31 = 1971-01-31"+ , "1971-0-32 = 1971-01-31"+ , "1971-0-40 = 1971-01-31"+ , "1971-1--7 = 1971-01-01"+ , "1971-1--1 = 1971-01-01"+ , "1971-1-0 = 1971-01-01"+ , "1971-1-1 = 1971-01-01"+ , "1971-1-2 = 1971-01-02"+ , "1971-1-27 = 1971-01-27"+ , "1971-1-28 = 1971-01-28"+ , "1971-1-29 = 1971-01-29"+ , "1971-1-30 = 1971-01-30"+ , "1971-1-31 = 1971-01-31"+ , "1971-1-32 = 1971-01-31"+ , "1971-1-40 = 1971-01-31"+ , "1971-2--7 = 1971-02-01"+ , "1971-2--1 = 1971-02-01"+ , "1971-2-0 = 1971-02-01"+ , "1971-2-1 = 1971-02-01"+ , "1971-2-2 = 1971-02-02"+ , "1971-2-27 = 1971-02-27"+ , "1971-2-28 = 1971-02-28"+ , "1971-2-29 = 1971-02-28"+ , "1971-2-30 = 1971-02-28"+ , "1971-2-31 = 1971-02-28"+ , "1971-2-32 = 1971-02-28"+ , "1971-2-40 = 1971-02-28"+ , "1971-12--7 = 1971-12-01"+ , "1971-12--1 = 1971-12-01"+ , "1971-12-0 = 1971-12-01"+ , "1971-12-1 = 1971-12-01"+ , "1971-12-2 = 1971-12-02"+ , "1971-12-27 = 1971-12-27"+ , "1971-12-28 = 1971-12-28"+ , "1971-12-29 = 1971-12-29"+ , "1971-12-30 = 1971-12-30"+ , "1971-12-31 = 1971-12-31"+ , "1971-12-32 = 1971-12-31"+ , "1971-12-40 = 1971-12-31"+ , "1971-13--7 = 1971-12-01"+ , "1971-13--1 = 1971-12-01"+ , "1971-13-0 = 1971-12-01"+ , "1971-13-1 = 1971-12-01"+ , "1971-13-2 = 1971-12-02"+ , "1971-13-27 = 1971-12-27"+ , "1971-13-28 = 1971-12-28"+ , "1971-13-29 = 1971-12-29"+ , "1971-13-30 = 1971-12-30"+ , "1971-13-31 = 1971-12-31"+ , "1971-13-32 = 1971-12-31"+ , "1971-13-40 = 1971-12-31"+ , "1971-17--7 = 1971-12-01"+ , "1971-17--1 = 1971-12-01"+ , "1971-17-0 = 1971-12-01"+ , "1971-17-1 = 1971-12-01"+ , "1971-17-2 = 1971-12-02"+ , "1971-17-27 = 1971-12-27"+ , "1971-17-28 = 1971-12-28"+ , "1971-17-29 = 1971-12-29"+ , "1971-17-30 = 1971-12-30"+ , "1971-17-31 = 1971-12-31"+ , "1971-17-32 = 1971-12-31"+ , "1971-17-40 = 1971-12-31"+ , "ISOWeekDay"+ , "1968-W-20--2 = 1968-W01-1"+ , "1968-W-20--1 = 1968-W01-1"+ , "1968-W-20-0 = 1968-W01-1"+ , "1968-W-20-1 = 1968-W01-1"+ , "1968-W-20-4 = 1968-W01-4"+ , "1968-W-20-6 = 1968-W01-6"+ , "1968-W-20-7 = 1968-W01-7"+ , "1968-W-20-8 = 1968-W01-7"+ , "1968-W-20-9 = 1968-W01-7"+ , "1968-W-1--2 = 1968-W01-1"+ , "1968-W-1--1 = 1968-W01-1"+ , "1968-W-1-0 = 1968-W01-1"+ , "1968-W-1-1 = 1968-W01-1"+ , "1968-W-1-4 = 1968-W01-4"+ , "1968-W-1-6 = 1968-W01-6"+ , "1968-W-1-7 = 1968-W01-7"+ , "1968-W-1-8 = 1968-W01-7"+ , "1968-W-1-9 = 1968-W01-7"+ , "1968-W0--2 = 1968-W01-1"+ , "1968-W0--1 = 1968-W01-1"+ , "1968-W0-0 = 1968-W01-1"+ , "1968-W0-1 = 1968-W01-1"+ , "1968-W0-4 = 1968-W01-4"+ , "1968-W0-6 = 1968-W01-6"+ , "1968-W0-7 = 1968-W01-7"+ , "1968-W0-8 = 1968-W01-7"+ , "1968-W0-9 = 1968-W01-7"+ , "1968-W1--2 = 1968-W01-1"+ , "1968-W1--1 = 1968-W01-1"+ , "1968-W1-0 = 1968-W01-1"+ , "1968-W1-1 = 1968-W01-1"+ , "1968-W1-4 = 1968-W01-4"+ , "1968-W1-6 = 1968-W01-6"+ , "1968-W1-7 = 1968-W01-7"+ , "1968-W1-8 = 1968-W01-7"+ , "1968-W1-9 = 1968-W01-7"+ , "1968-W20--2 = 1968-W20-1"+ , "1968-W20--1 = 1968-W20-1"+ , "1968-W20-0 = 1968-W20-1"+ , "1968-W20-1 = 1968-W20-1"+ , "1968-W20-4 = 1968-W20-4"+ , "1968-W20-6 = 1968-W20-6"+ , "1968-W20-7 = 1968-W20-7"+ , "1968-W20-8 = 1968-W20-7"+ , "1968-W20-9 = 1968-W20-7"+ , "1968-W51--2 = 1968-W51-1"+ , "1968-W51--1 = 1968-W51-1"+ , "1968-W51-0 = 1968-W51-1"+ , "1968-W51-1 = 1968-W51-1"+ , "1968-W51-4 = 1968-W51-4"+ , "1968-W51-6 = 1968-W51-6"+ , "1968-W51-7 = 1968-W51-7"+ , "1968-W51-8 = 1968-W51-7"+ , "1968-W51-9 = 1968-W51-7"+ , "1968-W52--2 = 1968-W52-1"+ , "1968-W52--1 = 1968-W52-1"+ , "1968-W52-0 = 1968-W52-1"+ , "1968-W52-1 = 1968-W52-1"+ , "1968-W52-4 = 1968-W52-4"+ , "1968-W52-6 = 1968-W52-6"+ , "1968-W52-7 = 1968-W52-7"+ , "1968-W52-8 = 1968-W52-7"+ , "1968-W52-9 = 1968-W52-7"+ , "1968-W53--2 = 1968-W52-1"+ , "1968-W53--1 = 1968-W52-1"+ , "1968-W53-0 = 1968-W52-1"+ , "1968-W53-1 = 1968-W52-1"+ , "1968-W53-4 = 1968-W52-4"+ , "1968-W53-6 = 1968-W52-6"+ , "1968-W53-7 = 1968-W52-7"+ , "1968-W53-8 = 1968-W52-7"+ , "1968-W53-9 = 1968-W52-7"+ , "1968-W54--2 = 1968-W52-1"+ , "1968-W54--1 = 1968-W52-1"+ , "1968-W54-0 = 1968-W52-1"+ , "1968-W54-1 = 1968-W52-1"+ , "1968-W54-4 = 1968-W52-4"+ , "1968-W54-6 = 1968-W52-6"+ , "1968-W54-7 = 1968-W52-7"+ , "1968-W54-8 = 1968-W52-7"+ , "1968-W54-9 = 1968-W52-7"+ , "1969-W-20--2 = 1969-W01-1"+ , "1969-W-20--1 = 1969-W01-1"+ , "1969-W-20-0 = 1969-W01-1"+ , "1969-W-20-1 = 1969-W01-1"+ , "1969-W-20-4 = 1969-W01-4"+ , "1969-W-20-6 = 1969-W01-6"+ , "1969-W-20-7 = 1969-W01-7"+ , "1969-W-20-8 = 1969-W01-7"+ , "1969-W-20-9 = 1969-W01-7"+ , "1969-W-1--2 = 1969-W01-1"+ , "1969-W-1--1 = 1969-W01-1"+ , "1969-W-1-0 = 1969-W01-1"+ , "1969-W-1-1 = 1969-W01-1"+ , "1969-W-1-4 = 1969-W01-4"+ , "1969-W-1-6 = 1969-W01-6"+ , "1969-W-1-7 = 1969-W01-7"+ , "1969-W-1-8 = 1969-W01-7"+ , "1969-W-1-9 = 1969-W01-7"+ , "1969-W0--2 = 1969-W01-1"+ , "1969-W0--1 = 1969-W01-1"+ , "1969-W0-0 = 1969-W01-1"+ , "1969-W0-1 = 1969-W01-1"+ , "1969-W0-4 = 1969-W01-4"+ , "1969-W0-6 = 1969-W01-6"+ , "1969-W0-7 = 1969-W01-7"+ , "1969-W0-8 = 1969-W01-7"+ , "1969-W0-9 = 1969-W01-7"+ , "1969-W1--2 = 1969-W01-1"+ , "1969-W1--1 = 1969-W01-1"+ , "1969-W1-0 = 1969-W01-1"+ , "1969-W1-1 = 1969-W01-1"+ , "1969-W1-4 = 1969-W01-4"+ , "1969-W1-6 = 1969-W01-6"+ , "1969-W1-7 = 1969-W01-7"+ , "1969-W1-8 = 1969-W01-7"+ , "1969-W1-9 = 1969-W01-7"+ , "1969-W20--2 = 1969-W20-1"+ , "1969-W20--1 = 1969-W20-1"+ , "1969-W20-0 = 1969-W20-1"+ , "1969-W20-1 = 1969-W20-1"+ , "1969-W20-4 = 1969-W20-4"+ , "1969-W20-6 = 1969-W20-6"+ , "1969-W20-7 = 1969-W20-7"+ , "1969-W20-8 = 1969-W20-7"+ , "1969-W20-9 = 1969-W20-7"+ , "1969-W51--2 = 1969-W51-1"+ , "1969-W51--1 = 1969-W51-1"+ , "1969-W51-0 = 1969-W51-1"+ , "1969-W51-1 = 1969-W51-1"+ , "1969-W51-4 = 1969-W51-4"+ , "1969-W51-6 = 1969-W51-6"+ , "1969-W51-7 = 1969-W51-7"+ , "1969-W51-8 = 1969-W51-7"+ , "1969-W51-9 = 1969-W51-7"+ , "1969-W52--2 = 1969-W52-1"+ , "1969-W52--1 = 1969-W52-1"+ , "1969-W52-0 = 1969-W52-1"+ , "1969-W52-1 = 1969-W52-1"+ , "1969-W52-4 = 1969-W52-4"+ , "1969-W52-6 = 1969-W52-6"+ , "1969-W52-7 = 1969-W52-7"+ , "1969-W52-8 = 1969-W52-7"+ , "1969-W52-9 = 1969-W52-7"+ , "1969-W53--2 = 1969-W52-1"+ , "1969-W53--1 = 1969-W52-1"+ , "1969-W53-0 = 1969-W52-1"+ , "1969-W53-1 = 1969-W52-1"+ , "1969-W53-4 = 1969-W52-4"+ , "1969-W53-6 = 1969-W52-6"+ , "1969-W53-7 = 1969-W52-7"+ , "1969-W53-8 = 1969-W52-7"+ , "1969-W53-9 = 1969-W52-7"+ , "1969-W54--2 = 1969-W52-1"+ , "1969-W54--1 = 1969-W52-1"+ , "1969-W54-0 = 1969-W52-1"+ , "1969-W54-1 = 1969-W52-1"+ , "1969-W54-4 = 1969-W52-4"+ , "1969-W54-6 = 1969-W52-6"+ , "1969-W54-7 = 1969-W52-7"+ , "1969-W54-8 = 1969-W52-7"+ , "1969-W54-9 = 1969-W52-7"+ , "2004-W-20--2 = 2004-W01-1"+ , "2004-W-20--1 = 2004-W01-1"+ , "2004-W-20-0 = 2004-W01-1"+ , "2004-W-20-1 = 2004-W01-1"+ , "2004-W-20-4 = 2004-W01-4"+ , "2004-W-20-6 = 2004-W01-6"+ , "2004-W-20-7 = 2004-W01-7"+ , "2004-W-20-8 = 2004-W01-7"+ , "2004-W-20-9 = 2004-W01-7"+ , "2004-W-1--2 = 2004-W01-1"+ , "2004-W-1--1 = 2004-W01-1"+ , "2004-W-1-0 = 2004-W01-1"+ , "2004-W-1-1 = 2004-W01-1"+ , "2004-W-1-4 = 2004-W01-4"+ , "2004-W-1-6 = 2004-W01-6"+ , "2004-W-1-7 = 2004-W01-7"+ , "2004-W-1-8 = 2004-W01-7"+ , "2004-W-1-9 = 2004-W01-7"+ , "2004-W0--2 = 2004-W01-1"+ , "2004-W0--1 = 2004-W01-1"+ , "2004-W0-0 = 2004-W01-1"+ , "2004-W0-1 = 2004-W01-1"+ , "2004-W0-4 = 2004-W01-4"+ , "2004-W0-6 = 2004-W01-6"+ , "2004-W0-7 = 2004-W01-7"+ , "2004-W0-8 = 2004-W01-7"+ , "2004-W0-9 = 2004-W01-7"+ , "2004-W1--2 = 2004-W01-1"+ , "2004-W1--1 = 2004-W01-1"+ , "2004-W1-0 = 2004-W01-1"+ , "2004-W1-1 = 2004-W01-1"+ , "2004-W1-4 = 2004-W01-4"+ , "2004-W1-6 = 2004-W01-6"+ , "2004-W1-7 = 2004-W01-7"+ , "2004-W1-8 = 2004-W01-7"+ , "2004-W1-9 = 2004-W01-7"+ , "2004-W20--2 = 2004-W20-1"+ , "2004-W20--1 = 2004-W20-1"+ , "2004-W20-0 = 2004-W20-1"+ , "2004-W20-1 = 2004-W20-1"+ , "2004-W20-4 = 2004-W20-4"+ , "2004-W20-6 = 2004-W20-6"+ , "2004-W20-7 = 2004-W20-7"+ , "2004-W20-8 = 2004-W20-7"+ , "2004-W20-9 = 2004-W20-7"+ , "2004-W51--2 = 2004-W51-1"+ , "2004-W51--1 = 2004-W51-1"+ , "2004-W51-0 = 2004-W51-1"+ , "2004-W51-1 = 2004-W51-1"+ , "2004-W51-4 = 2004-W51-4"+ , "2004-W51-6 = 2004-W51-6"+ , "2004-W51-7 = 2004-W51-7"+ , "2004-W51-8 = 2004-W51-7"+ , "2004-W51-9 = 2004-W51-7"+ , "2004-W52--2 = 2004-W52-1"+ , "2004-W52--1 = 2004-W52-1"+ , "2004-W52-0 = 2004-W52-1"+ , "2004-W52-1 = 2004-W52-1"+ , "2004-W52-4 = 2004-W52-4"+ , "2004-W52-6 = 2004-W52-6"+ , "2004-W52-7 = 2004-W52-7"+ , "2004-W52-8 = 2004-W52-7"+ , "2004-W52-9 = 2004-W52-7"+ , "2004-W53--2 = 2004-W53-1"+ , "2004-W53--1 = 2004-W53-1"+ , "2004-W53-0 = 2004-W53-1"+ , "2004-W53-1 = 2004-W53-1"+ , "2004-W53-4 = 2004-W53-4"+ , "2004-W53-6 = 2004-W53-6"+ , "2004-W53-7 = 2004-W53-7"+ , "2004-W53-8 = 2004-W53-7"+ , "2004-W53-9 = 2004-W53-7"+ , "2004-W54--2 = 2004-W53-1"+ , "2004-W54--1 = 2004-W53-1"+ , "2004-W54-0 = 2004-W53-1"+ , "2004-W54-1 = 2004-W53-1"+ , "2004-W54-4 = 2004-W53-4"+ , "2004-W54-6 = 2004-W53-6"+ , "2004-W54-7 = 2004-W53-7"+ , "2004-W54-8 = 2004-W53-7"+ , "2004-W54-9 = 2004-W53-7" ]
+ Test/ConvertBack.hs view
@@ -0,0 +1,40 @@+module Test.ConvertBack where++import Data.Time.Calendar.OrdinalDate+import Data.Time.Calendar.Julian+import Data.Time.Calendar.WeekDate+import Data.Time.Calendar+import Test.TestUtil++checkDay :: (Show t) => (Day -> t) -> (t -> Day) -> (t -> Maybe Day) -> Day -> String+checkDay encodeDay decodeDay decodeDayValid day+ = let st = encodeDay day+ day' = decodeDay st+ mday' = decodeDayValid st++ a = if day /= day'+ then unwords [ show day, "-> "+ , show st, "-> "+ , show day'+ , "(diff", show (diffDays day' day) ++ ")" ]+ else ""++ b = if Just day /= mday'+ then unwords [show day, "->", show st, "->", show mday']+ else ""+ in a ++ b+ +checkers :: [Day -> String]+checkers+ = [ checkDay toOrdinalDate (\(y,d) -> fromOrdinalDate y d) (\(y,d) -> fromOrdinalDateValid y d)+ , checkDay toWeekDate (\(y,w,d) -> fromWeekDate y w d) (\(y,w,d) -> fromWeekDateValid y w d)+ , checkDay toGregorian (\(y,m,d) -> fromGregorian y m d) (\(y,m,d) -> fromGregorianValid y m d)+ , checkDay toJulian (\(y,m,d) -> fromJulian y m d) (\(y,m,d) -> fromJulianValid y m d) ]++days :: [Day]+days = [ModifiedJulianDay 50000 .. ModifiedJulianDay 50200] +++ (fmap (\year -> (fromGregorian year 1 4)) [1980..2000])++convertBack :: Test+convertBack = pureTest "convertBack" $+ diff "" $ concatMap (\ch -> concatMap ch days) checkers
+ Test/CurrentTime.hs view
@@ -0,0 +1,13 @@+{-# OPTIONS -Wall -Werror #-}++module Main where++import Data.Time++main :: IO ()+main = do+ now <- getCurrentTime+ putStrLn (show (utctDay now) ++ "," ++ show (utctDayTime now))+ putStrLn (show (utcToZonedTime utc now :: ZonedTime))+ myzone <- getCurrentTimeZone+ putStrLn (show (utcToZonedTime myzone now :: ZonedTime))
+ Test/LongWeekYears.hs view
@@ -0,0 +1,20 @@+module Test.LongWeekYears where++import Data.Time.Calendar.WeekDate+import Data.Time.Calendar+import Test.TestUtil+import Test.LongWeekYearsRef++longYear :: Integer -> Bool+longYear year = case toWeekDate (fromGregorian year 12 31) of+ (_,53,_) -> True+ _ -> False++showLongYear :: Integer -> String+showLongYear year+ = unwords [ show year ++ ":"+ , (if isLeapYear year then "L" else " ") ++ (if longYear year then "*" else " ") ]++longWeekYears :: Test+longWeekYears = pureTest "longWeekYears" $+ diff longWeekYearsRef $ unlines $ map showLongYear [1901 .. 2050]
+ Test/LongWeekYearsRef.hs view
@@ -0,0 +1,155 @@+module Test.LongWeekYearsRef where++longWeekYearsRef :: String+longWeekYearsRef =+ unlines+ [ "1901: "+ , "1902: "+ , "1903: *"+ , "1904: L "+ , "1905: "+ , "1906: "+ , "1907: "+ , "1908: L*"+ , "1909: "+ , "1910: "+ , "1911: "+ , "1912: L "+ , "1913: "+ , "1914: *"+ , "1915: "+ , "1916: L "+ , "1917: "+ , "1918: "+ , "1919: "+ , "1920: L*"+ , "1921: "+ , "1922: "+ , "1923: "+ , "1924: L "+ , "1925: *"+ , "1926: "+ , "1927: "+ , "1928: L "+ , "1929: "+ , "1930: "+ , "1931: *"+ , "1932: L "+ , "1933: "+ , "1934: "+ , "1935: "+ , "1936: L*"+ , "1937: "+ , "1938: "+ , "1939: "+ , "1940: L "+ , "1941: "+ , "1942: *"+ , "1943: "+ , "1944: L "+ , "1945: "+ , "1946: "+ , "1947: "+ , "1948: L*"+ , "1949: "+ , "1950: "+ , "1951: "+ , "1952: L "+ , "1953: *"+ , "1954: "+ , "1955: "+ , "1956: L "+ , "1957: "+ , "1958: "+ , "1959: *"+ , "1960: L "+ , "1961: "+ , "1962: "+ , "1963: "+ , "1964: L*"+ , "1965: "+ , "1966: "+ , "1967: "+ , "1968: L "+ , "1969: "+ , "1970: *"+ , "1971: "+ , "1972: L "+ , "1973: "+ , "1974: "+ , "1975: "+ , "1976: L*"+ , "1977: "+ , "1978: "+ , "1979: "+ , "1980: L "+ , "1981: *"+ , "1982: "+ , "1983: "+ , "1984: L "+ , "1985: "+ , "1986: "+ , "1987: *"+ , "1988: L "+ , "1989: "+ , "1990: "+ , "1991: "+ , "1992: L*"+ , "1993: "+ , "1994: "+ , "1995: "+ , "1996: L "+ , "1997: "+ , "1998: *"+ , "1999: "+ , "2000: L "+ , "2001: "+ , "2002: "+ , "2003: "+ , "2004: L*"+ , "2005: "+ , "2006: "+ , "2007: "+ , "2008: L "+ , "2009: *"+ , "2010: "+ , "2011: "+ , "2012: L "+ , "2013: "+ , "2014: "+ , "2015: *"+ , "2016: L "+ , "2017: "+ , "2018: "+ , "2019: "+ , "2020: L*"+ , "2021: "+ , "2022: "+ , "2023: "+ , "2024: L "+ , "2025: "+ , "2026: *"+ , "2027: "+ , "2028: L "+ , "2029: "+ , "2030: "+ , "2031: "+ , "2032: L*"+ , "2033: "+ , "2034: "+ , "2035: "+ , "2036: L "+ , "2037: *"+ , "2038: "+ , "2039: "+ , "2040: L "+ , "2041: "+ , "2042: "+ , "2043: *"+ , "2044: L "+ , "2045: "+ , "2046: "+ , "2047: "+ , "2048: L*"+ , "2049: "+ , "2050: " ]
+ Test/RealToFracBenchmark.hs view
@@ -0,0 +1,22 @@+{- Contributed by Liyang HU <haskell.org@liyang.hu> -}+module Main where++import Prelude+import Control.Applicative+import Control.Monad+import Control.DeepSeq+import Data.Time+import Data.Time.Clock.POSIX+import System.Random++main :: IO ()+main = do+ ts <- replicateM 100000 $ do+ t <- posixSecondsToUTCTime . realToFrac <$>+ ( (*) . fromInteger <$> randomRIO (-15*10^21, 15*10^21) <*>+ randomIO :: IO Double ) :: IO UTCTime+ rnf t `seq` return t+ now <- getCurrentTime+ print . sum $ map (diffUTCTime now) ts+ print =<< flip diffUTCTime now <$> getCurrentTime+
+ Test/ShowDST.hs view
@@ -0,0 +1,43 @@+{-# OPTIONS -Wall -Werror #-}++module Main where++import Data.Time++monthBeginning :: TimeZone -> Integer -> Int -> UTCTime+monthBeginning zone year month = localTimeToUTC zone+ (LocalTime (fromGregorian year month 1) midnight)++findTransition :: UTCTime -> UTCTime -> IO [(UTCTime,TimeZone,TimeZone)]+findTransition a b = do+ za <- getTimeZone a+ zb <- getTimeZone b+ if za == zb then return [] else do+ let c = addUTCTime ((diffUTCTime b a) / 2) a+ if a == c then return [(b,za,zb)] else do+ tp <- findTransition a c+ tq <- findTransition c b+ return (tp ++ tq)++showZoneTime :: TimeZone -> UTCTime -> String+showZoneTime zone time = show (utcToZonedTime zone time)++showTransition :: (UTCTime,TimeZone,TimeZone) -> String+showTransition (time,zone1,zone2) = (showZoneTime zone1 time) ++ " => " ++ (showZoneTime zone2 time)++main :: IO ()+main = do+ now <- getCurrentTime+ zone <- getTimeZone now+ let (year,_,_) = toGregorian (localDay (utcToLocalTime zone now))+ putStrLn ("DST adjustments for " ++ show year ++ ":")+ let t0 = monthBeginning zone year 1+ let t1 = monthBeginning zone year 4+ let t2 = monthBeginning zone year 7+ let t3 = monthBeginning zone year 10+ let t4 = monthBeginning zone (year + 1) 1+ tr1 <- findTransition t0 t1+ tr2 <- findTransition t1 t2+ tr3 <- findTransition t2 t3+ tr4 <- findTransition t3 t4+ mapM_ (putStrLn . showTransition) (tr1 ++ tr2 ++ tr3 ++ tr4)
+ Test/TAI_UTC_DAT.hs view
@@ -0,0 +1,42 @@+module Test.TAI_UTC_DAT where++taiUTC_DAT :: String+taiUTC_DAT =+ unlines + [ "1961 JAN 1 =JD 2437300.5 TAI-UTC= 1.4228180 S + (MJD - 37300.) X 0.001296 S"+ , "1961 AUG 1 =JD 2437512.5 TAI-UTC= 1.3728180 S + (MJD - 37300.) X 0.001296 S"+ , "1962 JAN 1 =JD 2437665.5 TAI-UTC= 1.8458580 S + (MJD - 37665.) X 0.0011232S"+ , "1963 NOV 1 =JD 2438334.5 TAI-UTC= 1.9458580 S + (MJD - 37665.) X 0.0011232S"+ , "1964 JAN 1 =JD 2438395.5 TAI-UTC= 3.2401300 S + (MJD - 38761.) X 0.001296 S"+ , "1964 APR 1 =JD 2438486.5 TAI-UTC= 3.3401300 S + (MJD - 38761.) X 0.001296 S"+ , "1964 SEP 1 =JD 2438639.5 TAI-UTC= 3.4401300 S + (MJD - 38761.) X 0.001296 S"+ , "1965 JAN 1 =JD 2438761.5 TAI-UTC= 3.5401300 S + (MJD - 38761.) X 0.001296 S"+ , "1965 MAR 1 =JD 2438820.5 TAI-UTC= 3.6401300 S + (MJD - 38761.) X 0.001296 S"+ , "1965 JUL 1 =JD 2438942.5 TAI-UTC= 3.7401300 S + (MJD - 38761.) X 0.001296 S"+ , "1965 SEP 1 =JD 2439004.5 TAI-UTC= 3.8401300 S + (MJD - 38761.) X 0.001296 S"+ , "1966 JAN 1 =JD 2439126.5 TAI-UTC= 4.3131700 S + (MJD - 39126.) X 0.002592 S"+ , "1968 FEB 1 =JD 2439887.5 TAI-UTC= 4.2131700 S + (MJD - 39126.) X 0.002592 S"+ , "1972 JAN 1 =JD 2441317.5 TAI-UTC= 10.0 S + (MJD - 41317.) X 0.0 S"+ , "1972 JUL 1 =JD 2441499.5 TAI-UTC= 11.0 S + (MJD - 41317.) X 0.0 S"+ , "1973 JAN 1 =JD 2441683.5 TAI-UTC= 12.0 S + (MJD - 41317.) X 0.0 S"+ , "1974 JAN 1 =JD 2442048.5 TAI-UTC= 13.0 S + (MJD - 41317.) X 0.0 S"+ , "1975 JAN 1 =JD 2442413.5 TAI-UTC= 14.0 S + (MJD - 41317.) X 0.0 S"+ , "1976 JAN 1 =JD 2442778.5 TAI-UTC= 15.0 S + (MJD - 41317.) X 0.0 S"+ , "1977 JAN 1 =JD 2443144.5 TAI-UTC= 16.0 S + (MJD - 41317.) X 0.0 S"+ , "1978 JAN 1 =JD 2443509.5 TAI-UTC= 17.0 S + (MJD - 41317.) X 0.0 S"+ , "1979 JAN 1 =JD 2443874.5 TAI-UTC= 18.0 S + (MJD - 41317.) X 0.0 S"+ , "1980 JAN 1 =JD 2444239.5 TAI-UTC= 19.0 S + (MJD - 41317.) X 0.0 S"+ , "1981 JUL 1 =JD 2444786.5 TAI-UTC= 20.0 S + (MJD - 41317.) X 0.0 S"+ , "1982 JUL 1 =JD 2445151.5 TAI-UTC= 21.0 S + (MJD - 41317.) X 0.0 S"+ , "1983 JUL 1 =JD 2445516.5 TAI-UTC= 22.0 S + (MJD - 41317.) X 0.0 S"+ , "1985 JUL 1 =JD 2446247.5 TAI-UTC= 23.0 S + (MJD - 41317.) X 0.0 S"+ , "1988 JAN 1 =JD 2447161.5 TAI-UTC= 24.0 S + (MJD - 41317.) X 0.0 S"+ , "1990 JAN 1 =JD 2447892.5 TAI-UTC= 25.0 S + (MJD - 41317.) X 0.0 S"+ , "1991 JAN 1 =JD 2448257.5 TAI-UTC= 26.0 S + (MJD - 41317.) X 0.0 S"+ , "1992 JUL 1 =JD 2448804.5 TAI-UTC= 27.0 S + (MJD - 41317.) X 0.0 S"+ , "1993 JUL 1 =JD 2449169.5 TAI-UTC= 28.0 S + (MJD - 41317.) X 0.0 S"+ , "1994 JUL 1 =JD 2449534.5 TAI-UTC= 29.0 S + (MJD - 41317.) X 0.0 S"+ , "1996 JAN 1 =JD 2450083.5 TAI-UTC= 30.0 S + (MJD - 41317.) X 0.0 S"+ , "1997 JUL 1 =JD 2450630.5 TAI-UTC= 31.0 S + (MJD - 41317.) X 0.0 S"+ , "1999 JAN 1 =JD 2451179.5 TAI-UTC= 32.0 S + (MJD - 41317.) X 0.0 S"+ , "2006 JAN 1 =JD 2453736.5 TAI-UTC= 33.0 S + (MJD - 41317.) X 0.0 S" ]
+ Test/TestCalendars.hs view
@@ -0,0 +1,30 @@+module Test.TestCalendars where++import Data.Time.Calendar.Julian+import Data.Time.Calendar.WeekDate+import Data.Time.Calendar+import Test.TestUtil+import Test.TestCalendarsRef++showers :: [(String,Day -> String)]+showers = [+ ("MJD",show . toModifiedJulianDay),+ ("Gregorian",showGregorian),+ ("Julian",showJulian),+ ("ISO 8601",showWeekDate)+ ]++days :: [Day]+days = [+ fromGregorian 0 12 31,+ fromJulian 1752 9 2,+ fromGregorian 1752 9 14,+ fromGregorian 2005 1 23+ ]++testCalendars :: Test+testCalendars = pureTest "testCalendars" $+ diff testCalendarsRef $ unlines $ map (\d -> showShowers d) days+ where+ showShowers day = + concatMap (\(nm,shower) -> unwords [" ==", nm, shower day]) showers
+ Test/TestCalendarsRef.hs view
@@ -0,0 +1,9 @@+module Test.TestCalendarsRef where++testCalendarsRef :: String+testCalendarsRef =+ unlines+ [ " == MJD -678576 == Gregorian 0000-12-31 == Julian 0001-01-02 == ISO 8601 0000-W52-7"+ , " == MJD -38780 == Gregorian 1752-09-13 == Julian 1752-09-02 == ISO 8601 1752-W37-3"+ , " == MJD -38779 == Gregorian 1752-09-14 == Julian 1752-09-03 == ISO 8601 1752-W37-4"+ , " == MJD 53393 == Gregorian 2005-01-23 == Julian 2005-01-10 == ISO 8601 2005-W03-7" ]
+ Test/TestEaster.hs view
@@ -0,0 +1,38 @@+{-# OPTIONS -Wall -Werror #-}++module Test.TestEaster where++import Data.Time.Calendar.Easter+import Data.Time.Calendar+import Data.Time.Format++import System.Locale++import Test.TestUtil+import Test.TestEasterRef++--++days :: [Day]+days = [ModifiedJulianDay 53000 .. ModifiedJulianDay 53014]++showWithWDay :: Day -> String+showWithWDay = formatTime defaultTimeLocale "%F %A"++testEaster :: Test+testEaster = pureTest "testEaster" $ let + ds = unlines $ map (\day ->+ unwords [ showWithWDay day, "->"+ , showWithWDay (sundayAfter day)]) days++ f y = unwords [ show y ++ ", Gregorian: moon,"+ , show (gregorianPaschalMoon y) ++ ": Easter,"+ , showWithWDay (gregorianEaster y)]+ ++ "\n"++ g y = unwords [ show y ++ ", Orthodox : moon,"+ , show (orthodoxPaschalMoon y) ++ ": Easter,"+ , showWithWDay (orthodoxEaster y)]+ ++ "\n"++ in diff testEasterRef $ ds ++ concatMap (\y -> f y ++ g y) [2000..2020]
+ Test/TestEasterRef.hs view
@@ -0,0 +1,62 @@+module Test.TestEasterRef where++testEasterRef :: String+testEasterRef =+ unlines+ [ "2003-12-27 Saturday -> 2003-12-28 Sunday"+ , "2003-12-28 Sunday -> 2004-01-04 Sunday"+ , "2003-12-29 Monday -> 2004-01-04 Sunday"+ , "2003-12-30 Tuesday -> 2004-01-04 Sunday"+ , "2003-12-31 Wednesday -> 2004-01-04 Sunday"+ , "2004-01-01 Thursday -> 2004-01-04 Sunday"+ , "2004-01-02 Friday -> 2004-01-04 Sunday"+ , "2004-01-03 Saturday -> 2004-01-04 Sunday"+ , "2004-01-04 Sunday -> 2004-01-11 Sunday"+ , "2004-01-05 Monday -> 2004-01-11 Sunday"+ , "2004-01-06 Tuesday -> 2004-01-11 Sunday"+ , "2004-01-07 Wednesday -> 2004-01-11 Sunday"+ , "2004-01-08 Thursday -> 2004-01-11 Sunday"+ , "2004-01-09 Friday -> 2004-01-11 Sunday"+ , "2004-01-10 Saturday -> 2004-01-11 Sunday"+ , "2000, Gregorian: moon, 2000-04-18: Easter, 2000-04-23 Sunday"+ , "2000, Orthodox : moon, 2000-04-23: Easter, 2000-04-30 Sunday"+ , "2001, Gregorian: moon, 2001-04-08: Easter, 2001-04-15 Sunday"+ , "2001, Orthodox : moon, 2001-04-12: Easter, 2001-04-15 Sunday"+ , "2002, Gregorian: moon, 2002-03-28: Easter, 2002-03-31 Sunday"+ , "2002, Orthodox : moon, 2002-05-01: Easter, 2002-05-05 Sunday"+ , "2003, Gregorian: moon, 2003-04-16: Easter, 2003-04-20 Sunday"+ , "2003, Orthodox : moon, 2003-04-20: Easter, 2003-04-27 Sunday"+ , "2004, Gregorian: moon, 2004-04-05: Easter, 2004-04-11 Sunday"+ , "2004, Orthodox : moon, 2004-04-09: Easter, 2004-04-11 Sunday"+ , "2005, Gregorian: moon, 2005-03-25: Easter, 2005-03-27 Sunday"+ , "2005, Orthodox : moon, 2005-04-28: Easter, 2005-05-01 Sunday"+ , "2006, Gregorian: moon, 2006-04-13: Easter, 2006-04-16 Sunday"+ , "2006, Orthodox : moon, 2006-04-17: Easter, 2006-04-23 Sunday"+ , "2007, Gregorian: moon, 2007-04-02: Easter, 2007-04-08 Sunday"+ , "2007, Orthodox : moon, 2007-04-06: Easter, 2007-04-08 Sunday"+ , "2008, Gregorian: moon, 2008-03-22: Easter, 2008-03-23 Sunday"+ , "2008, Orthodox : moon, 2008-04-25: Easter, 2008-04-27 Sunday"+ , "2009, Gregorian: moon, 2009-04-10: Easter, 2009-04-12 Sunday"+ , "2009, Orthodox : moon, 2009-04-14: Easter, 2009-04-19 Sunday"+ , "2010, Gregorian: moon, 2010-03-30: Easter, 2010-04-04 Sunday"+ , "2010, Orthodox : moon, 2010-04-03: Easter, 2010-04-04 Sunday"+ , "2011, Gregorian: moon, 2011-04-18: Easter, 2011-04-24 Sunday"+ , "2011, Orthodox : moon, 2011-04-22: Easter, 2011-04-24 Sunday"+ , "2012, Gregorian: moon, 2012-04-07: Easter, 2012-04-08 Sunday"+ , "2012, Orthodox : moon, 2012-04-11: Easter, 2012-04-15 Sunday"+ , "2013, Gregorian: moon, 2013-03-27: Easter, 2013-03-31 Sunday"+ , "2013, Orthodox : moon, 2013-04-30: Easter, 2013-05-05 Sunday"+ , "2014, Gregorian: moon, 2014-04-14: Easter, 2014-04-20 Sunday"+ , "2014, Orthodox : moon, 2014-04-18: Easter, 2014-04-20 Sunday"+ , "2015, Gregorian: moon, 2015-04-03: Easter, 2015-04-05 Sunday"+ , "2015, Orthodox : moon, 2015-04-07: Easter, 2015-04-12 Sunday"+ , "2016, Gregorian: moon, 2016-03-23: Easter, 2016-03-27 Sunday"+ , "2016, Orthodox : moon, 2016-04-26: Easter, 2016-05-01 Sunday"+ , "2017, Gregorian: moon, 2017-04-11: Easter, 2017-04-16 Sunday"+ , "2017, Orthodox : moon, 2017-04-15: Easter, 2017-04-16 Sunday"+ , "2018, Gregorian: moon, 2018-03-31: Easter, 2018-04-01 Sunday"+ , "2018, Orthodox : moon, 2018-04-04: Easter, 2018-04-08 Sunday"+ , "2019, Gregorian: moon, 2019-04-18: Easter, 2019-04-21 Sunday"+ , "2019, Orthodox : moon, 2019-04-23: Easter, 2019-04-28 Sunday"+ , "2020, Gregorian: moon, 2020-04-08: Easter, 2020-04-12 Sunday"+ , "2020, Orthodox : moon, 2020-04-12: Easter, 2020-04-19 Sunday" ]
+ Test/TestFormat.hs view
@@ -0,0 +1,186 @@+{-# LANGUAGE ForeignFunctionInterface #-}++module Test.TestFormat where++import Data.Time+import Data.Time.Clock.POSIX+import Data.Char+import System.Locale+import Foreign+import Foreign.C+import Control.Exception;+import Test.TestUtil++{-+ size_t format_time (+ char *s, size_t maxsize,+ const char *format,+ int isdst,int gmtoff,time_t t);+-}++foreign import ccall unsafe "TestFormatStuff.h format_time" format_time :: CString -> CSize -> CString -> CInt -> CInt -> CString -> CTime -> IO CSize++withBuffer :: Int -> (CString -> IO CSize) -> IO String+withBuffer n f = withArray (replicate n 0) (\buffer -> do+ len <- f buffer+ peekCStringLen (buffer,fromIntegral len)+ )++unixFormatTime :: String -> TimeZone -> UTCTime -> IO String+unixFormatTime fmt zone time = withCString fmt (\pfmt -> withCString (timeZoneName zone) (\pzonename ->+ withBuffer 100 (\buffer -> format_time buffer 100 pfmt+ (if timeZoneSummerOnly zone then 1 else 0)+ (fromIntegral (timeZoneMinutes zone * 60))+ pzonename+ (fromInteger (truncate (utcTimeToPOSIXSeconds time)))+ )+ ))++locale :: TimeLocale+locale = defaultTimeLocale {dateTimeFmt = "%a %b %e %H:%M:%S %Y"}++zones :: [TimeZone]+zones = [utc,TimeZone 87 True "Fenwickian Daylight Time"]++baseTime0 :: UTCTime+baseTime0 = localTimeToUTC utc (LocalTime (fromGregorian 1970 01 01) midnight)++baseTime1 :: UTCTime+baseTime1 = localTimeToUTC utc (LocalTime (fromGregorian 2000 01 01) midnight)++getDay :: Integer -> UTCTime+getDay day = addUTCTime ((fromInteger day) * posixDayLength) baseTime1++getYearP1 :: Integer -> UTCTime+getYearP1 year = localTimeToUTC utc (LocalTime (fromGregorian year 01 01) midnight)++getYearP2 :: Integer -> UTCTime+getYearP2 year = localTimeToUTC utc (LocalTime (fromGregorian year 02 04) midnight)++getYearP3 :: Integer -> UTCTime+getYearP3 year = localTimeToUTC utc (LocalTime (fromGregorian year 03 04) midnight)++getYearP4 :: Integer -> UTCTime+getYearP4 year = localTimeToUTC utc (LocalTime (fromGregorian year 12 31) midnight)++years :: [Integer]+years = [999,1000,1899,1900,1901] ++ [1980..2000] ++ [9999,10000]++times :: [UTCTime]+times = [baseTime0] ++ (fmap getDay [0..23]) ++ (fmap getDay [0..100]) +++ (fmap getYearP1 years) ++ (fmap getYearP2 years) ++ (fmap getYearP3 years) ++ (fmap getYearP4 years)++padN :: Int -> Char -> String -> String+padN n _ s | n <= (length s) = s+padN n c s = (replicate (n - length s) c) ++ s++unixWorkarounds :: String -> String -> String+unixWorkarounds "%_Y" s = padN 4 ' ' s+unixWorkarounds "%0Y" s = padN 4 '0' s+unixWorkarounds "%_C" s = padN 2 ' ' s+unixWorkarounds "%0C" s = padN 2 '0' s+unixWorkarounds "%_G" s = padN 4 ' ' s+unixWorkarounds "%0G" s = padN 4 '0' s+unixWorkarounds "%_f" s = padN 2 ' ' s+unixWorkarounds "%0f" s = padN 2 '0' s+unixWorkarounds _ s = s++compareFormat :: String -> (String -> String) -> String -> TimeZone -> UTCTime -> Test+compareFormat testname modUnix fmt zone time = let+ ctime = utcToZonedTime zone time + haskellText = formatTime locale fmt ctime+ in ioTest (testname ++ ": " ++ (show fmt) ++ " of " ++ (show ctime)) $+ do+ unixText <- unixFormatTime fmt zone time+ let expectedText = unixWorkarounds fmt (modUnix unixText)+ return $ diff expectedText haskellText++-- as found in http://www.opengroup.org/onlinepubs/007908799/xsh/strftime.html+-- plus FgGklz+-- f not supported+-- P not always supported+-- s time-zone dependent+chars :: [Char]+chars = "aAbBcCdDeFgGhHIjklmMnprRStTuUVwWxXyYzZ%"++-- as found in "man strftime" on a glibc system. '#' is different, though+modifiers :: [Char]+modifiers = "_-0^"++formats :: [String]+formats = ["%G-W%V-%u","%U-%w","%W-%u"] ++ (fmap (\char -> '%':char:[]) chars)+ ++ (concat (fmap (\char -> fmap (\modifier -> '%':modifier:char:[]) modifiers) chars))++hashformats :: [String]+hashformats = (fmap (\char -> '%':'#':char:[]) chars)++somestrings :: [String]+somestrings = ["", " ", "-", "\n"]++getBottom :: a -> IO (Maybe Control.Exception.SomeException);+getBottom a = Control.Exception.catch (seq a (return Nothing)) (return . Just); ++safeString :: String -> IO String+safeString s = do+ msx <- getBottom s+ case msx of+ Just sx -> return (show sx)+ Nothing -> case s of+ (c:cc) -> do+ mcx <- getBottom c+ case mcx of+ Just cx -> return (show cx)+ Nothing -> do+ ss <- safeString cc+ return (c:ss)+ [] -> return ""++compareExpected :: (Eq t,Show t,ParseTime t) => String -> String -> String -> Maybe t -> Test+compareExpected testname fmt str expected = ioTest (testname ++ ": " ++ (show fmt) ++ " on " ++ (show str)) $ do+ let found = parseTime defaultTimeLocale fmt str+ mex <- getBottom found+ case mex of+ Just ex -> return $ Fail $ unwords [ "Exception: expected" , show expected ++ ", caught", show ex]+ Nothing -> return $ diff expected found++class (ParseTime t) => TestParse t where+ expectedParse :: String -> String -> Maybe t+ expectedParse "%Z" str | all isSpace str = Just (buildTime defaultTimeLocale [])+ expectedParse "%_Z" str | all isSpace str = Just (buildTime defaultTimeLocale [])+ expectedParse "%-Z" str | all isSpace str = Just (buildTime defaultTimeLocale [])+ expectedParse "%0Z" str | all isSpace str = Just (buildTime defaultTimeLocale [])+ expectedParse _ _ = Nothing++instance TestParse Day+instance TestParse TimeOfDay+instance TestParse LocalTime+instance TestParse TimeZone+instance TestParse ZonedTime+instance TestParse UTCTime++checkParse :: String -> String -> [Test]+checkParse fmt str+ = [ compareExpected "Day" fmt str (expectedParse fmt str :: Maybe Day)+ , compareExpected "TimeOfDay" fmt str (expectedParse fmt str :: Maybe TimeOfDay)+ , compareExpected "LocalTime" fmt str (expectedParse fmt str :: Maybe LocalTime)+ , compareExpected "TimeZone" fmt str (expectedParse fmt str :: Maybe TimeZone)+ , compareExpected "UTCTime" fmt str (expectedParse fmt str :: Maybe UTCTime) ]++testCheckParse :: [Test]+testCheckParse = concatMap (\fmt -> concatMap (\str -> checkParse fmt str) somestrings) formats++testCompareFormat :: [Test]+testCompareFormat = concatMap (\fmt -> concatMap (\time -> fmap (\zone -> compareFormat "compare format" id fmt zone time) zones) times) formats++testCompareHashFormat :: [Test]+testCompareHashFormat = concatMap (\fmt -> concatMap (\time -> fmap (\zone -> compareFormat "compare hashformat" (fmap toLower) fmt zone time) zones) times) hashformats++testFormats :: [Test]+testFormats = [+ testGroup "checkParse" testCheckParse,+ testGroup "compare format" testCompareFormat,+ testGroup "compare hashformat" testCompareHashFormat+ ]++testFormat :: Test+testFormat = testGroup "testFormat" testFormats
+ Test/TestFormatStuff.c view
@@ -0,0 +1,15 @@+#include "TestFormatStuff.h"++size_t format_time (+ char* buffer, size_t maxsize,+ const char* format,+ int isdst,int gmtoff,char* zonename,time_t t)+{+ t += gmtoff;+ struct tm tmd;+ gmtime_r(&t,&tmd);+ tmd.tm_isdst = isdst;+ tmd.tm_gmtoff = gmtoff;+ tmd.tm_zone = zonename;+ return strftime(buffer,maxsize,format,&tmd);+}
+ Test/TestFormatStuff.h view
@@ -0,0 +1,6 @@+#include <time.h>++size_t format_time (+ char *s, size_t maxsize,+ const char *format,+ int isdst,int gmtoff,char* zonename,time_t t);
+ Test/TestMonthDay.hs view
@@ -0,0 +1,22 @@+module Test.TestMonthDay where++import Data.Time.Calendar.MonthDay+import Test.TestUtil+import Test.TestMonthDayRef++showCompare :: (Eq a,Show a) => a -> String -> a -> String+showCompare a1 b a2 | a1 == a2 = (show a1) ++ " == " ++ b+showCompare a1 b a2 = "DIFF: " ++ (show a1) ++ " -> " ++ b ++ " -> " ++ (show a2)++testMonthDay :: Test+testMonthDay = pureTest "testMonthDay" $+ diff testMonthDayRef $ concat $ map (\isL -> unlines (leap isL : yearDays isL)) [False,True]+ where+ leap isLeap = if isLeap then "Leap:" else "Regular:"+ yearDays isLeap = + map (\yd -> let + (m,d) = dayOfYearToMonthAndDay isLeap yd+ yd' = monthAndDayToDayOfYear isLeap m d+ mdtext = show m ++ "-" ++ show d+ in showCompare yd mdtext yd')+ [-2..369]
+ Test/TestMonthDayRef.hs view
@@ -0,0 +1,751 @@+module Test.TestMonthDayRef where++testMonthDayRef :: String+testMonthDayRef =+ unlines+ [ "Regular:"+ , "DIFF: -2 -> 1-1 -> 1"+ , "DIFF: -1 -> 1-1 -> 1"+ , "DIFF: 0 -> 1-1 -> 1"+ , "1 == 1-1"+ , "2 == 1-2"+ , "3 == 1-3"+ , "4 == 1-4"+ , "5 == 1-5"+ , "6 == 1-6"+ , "7 == 1-7"+ , "8 == 1-8"+ , "9 == 1-9"+ , "10 == 1-10"+ , "11 == 1-11"+ , "12 == 1-12"+ , "13 == 1-13"+ , "14 == 1-14"+ , "15 == 1-15"+ , "16 == 1-16"+ , "17 == 1-17"+ , "18 == 1-18"+ , "19 == 1-19"+ , "20 == 1-20"+ , "21 == 1-21"+ , "22 == 1-22"+ , "23 == 1-23"+ , "24 == 1-24"+ , "25 == 1-25"+ , "26 == 1-26"+ , "27 == 1-27"+ , "28 == 1-28"+ , "29 == 1-29"+ , "30 == 1-30"+ , "31 == 1-31"+ , "32 == 2-1"+ , "33 == 2-2"+ , "34 == 2-3"+ , "35 == 2-4"+ , "36 == 2-5"+ , "37 == 2-6"+ , "38 == 2-7"+ , "39 == 2-8"+ , "40 == 2-9"+ , "41 == 2-10"+ , "42 == 2-11"+ , "43 == 2-12"+ , "44 == 2-13"+ , "45 == 2-14"+ , "46 == 2-15"+ , "47 == 2-16"+ , "48 == 2-17"+ , "49 == 2-18"+ , "50 == 2-19"+ , "51 == 2-20"+ , "52 == 2-21"+ , "53 == 2-22"+ , "54 == 2-23"+ , "55 == 2-24"+ , "56 == 2-25"+ , "57 == 2-26"+ , "58 == 2-27"+ , "59 == 2-28"+ , "60 == 3-1"+ , "61 == 3-2"+ , "62 == 3-3"+ , "63 == 3-4"+ , "64 == 3-5"+ , "65 == 3-6"+ , "66 == 3-7"+ , "67 == 3-8"+ , "68 == 3-9"+ , "69 == 3-10"+ , "70 == 3-11"+ , "71 == 3-12"+ , "72 == 3-13"+ , "73 == 3-14"+ , "74 == 3-15"+ , "75 == 3-16"+ , "76 == 3-17"+ , "77 == 3-18"+ , "78 == 3-19"+ , "79 == 3-20"+ , "80 == 3-21"+ , "81 == 3-22"+ , "82 == 3-23"+ , "83 == 3-24"+ , "84 == 3-25"+ , "85 == 3-26"+ , "86 == 3-27"+ , "87 == 3-28"+ , "88 == 3-29"+ , "89 == 3-30"+ , "90 == 3-31"+ , "91 == 4-1"+ , "92 == 4-2"+ , "93 == 4-3"+ , "94 == 4-4"+ , "95 == 4-5"+ , "96 == 4-6"+ , "97 == 4-7"+ , "98 == 4-8"+ , "99 == 4-9"+ , "100 == 4-10"+ , "101 == 4-11"+ , "102 == 4-12"+ , "103 == 4-13"+ , "104 == 4-14"+ , "105 == 4-15"+ , "106 == 4-16"+ , "107 == 4-17"+ , "108 == 4-18"+ , "109 == 4-19"+ , "110 == 4-20"+ , "111 == 4-21"+ , "112 == 4-22"+ , "113 == 4-23"+ , "114 == 4-24"+ , "115 == 4-25"+ , "116 == 4-26"+ , "117 == 4-27"+ , "118 == 4-28"+ , "119 == 4-29"+ , "120 == 4-30"+ , "121 == 5-1"+ , "122 == 5-2"+ , "123 == 5-3"+ , "124 == 5-4"+ , "125 == 5-5"+ , "126 == 5-6"+ , "127 == 5-7"+ , "128 == 5-8"+ , "129 == 5-9"+ , "130 == 5-10"+ , "131 == 5-11"+ , "132 == 5-12"+ , "133 == 5-13"+ , "134 == 5-14"+ , "135 == 5-15"+ , "136 == 5-16"+ , "137 == 5-17"+ , "138 == 5-18"+ , "139 == 5-19"+ , "140 == 5-20"+ , "141 == 5-21"+ , "142 == 5-22"+ , "143 == 5-23"+ , "144 == 5-24"+ , "145 == 5-25"+ , "146 == 5-26"+ , "147 == 5-27"+ , "148 == 5-28"+ , "149 == 5-29"+ , "150 == 5-30"+ , "151 == 5-31"+ , "152 == 6-1"+ , "153 == 6-2"+ , "154 == 6-3"+ , "155 == 6-4"+ , "156 == 6-5"+ , "157 == 6-6"+ , "158 == 6-7"+ , "159 == 6-8"+ , "160 == 6-9"+ , "161 == 6-10"+ , "162 == 6-11"+ , "163 == 6-12"+ , "164 == 6-13"+ , "165 == 6-14"+ , "166 == 6-15"+ , "167 == 6-16"+ , "168 == 6-17"+ , "169 == 6-18"+ , "170 == 6-19"+ , "171 == 6-20"+ , "172 == 6-21"+ , "173 == 6-22"+ , "174 == 6-23"+ , "175 == 6-24"+ , "176 == 6-25"+ , "177 == 6-26"+ , "178 == 6-27"+ , "179 == 6-28"+ , "180 == 6-29"+ , "181 == 6-30"+ , "182 == 7-1"+ , "183 == 7-2"+ , "184 == 7-3"+ , "185 == 7-4"+ , "186 == 7-5"+ , "187 == 7-6"+ , "188 == 7-7"+ , "189 == 7-8"+ , "190 == 7-9"+ , "191 == 7-10"+ , "192 == 7-11"+ , "193 == 7-12"+ , "194 == 7-13"+ , "195 == 7-14"+ , "196 == 7-15"+ , "197 == 7-16"+ , "198 == 7-17"+ , "199 == 7-18"+ , "200 == 7-19"+ , "201 == 7-20"+ , "202 == 7-21"+ , "203 == 7-22"+ , "204 == 7-23"+ , "205 == 7-24"+ , "206 == 7-25"+ , "207 == 7-26"+ , "208 == 7-27"+ , "209 == 7-28"+ , "210 == 7-29"+ , "211 == 7-30"+ , "212 == 7-31"+ , "213 == 8-1"+ , "214 == 8-2"+ , "215 == 8-3"+ , "216 == 8-4"+ , "217 == 8-5"+ , "218 == 8-6"+ , "219 == 8-7"+ , "220 == 8-8"+ , "221 == 8-9"+ , "222 == 8-10"+ , "223 == 8-11"+ , "224 == 8-12"+ , "225 == 8-13"+ , "226 == 8-14"+ , "227 == 8-15"+ , "228 == 8-16"+ , "229 == 8-17"+ , "230 == 8-18"+ , "231 == 8-19"+ , "232 == 8-20"+ , "233 == 8-21"+ , "234 == 8-22"+ , "235 == 8-23"+ , "236 == 8-24"+ , "237 == 8-25"+ , "238 == 8-26"+ , "239 == 8-27"+ , "240 == 8-28"+ , "241 == 8-29"+ , "242 == 8-30"+ , "243 == 8-31"+ , "244 == 9-1"+ , "245 == 9-2"+ , "246 == 9-3"+ , "247 == 9-4"+ , "248 == 9-5"+ , "249 == 9-6"+ , "250 == 9-7"+ , "251 == 9-8"+ , "252 == 9-9"+ , "253 == 9-10"+ , "254 == 9-11"+ , "255 == 9-12"+ , "256 == 9-13"+ , "257 == 9-14"+ , "258 == 9-15"+ , "259 == 9-16"+ , "260 == 9-17"+ , "261 == 9-18"+ , "262 == 9-19"+ , "263 == 9-20"+ , "264 == 9-21"+ , "265 == 9-22"+ , "266 == 9-23"+ , "267 == 9-24"+ , "268 == 9-25"+ , "269 == 9-26"+ , "270 == 9-27"+ , "271 == 9-28"+ , "272 == 9-29"+ , "273 == 9-30"+ , "274 == 10-1"+ , "275 == 10-2"+ , "276 == 10-3"+ , "277 == 10-4"+ , "278 == 10-5"+ , "279 == 10-6"+ , "280 == 10-7"+ , "281 == 10-8"+ , "282 == 10-9"+ , "283 == 10-10"+ , "284 == 10-11"+ , "285 == 10-12"+ , "286 == 10-13"+ , "287 == 10-14"+ , "288 == 10-15"+ , "289 == 10-16"+ , "290 == 10-17"+ , "291 == 10-18"+ , "292 == 10-19"+ , "293 == 10-20"+ , "294 == 10-21"+ , "295 == 10-22"+ , "296 == 10-23"+ , "297 == 10-24"+ , "298 == 10-25"+ , "299 == 10-26"+ , "300 == 10-27"+ , "301 == 10-28"+ , "302 == 10-29"+ , "303 == 10-30"+ , "304 == 10-31"+ , "305 == 11-1"+ , "306 == 11-2"+ , "307 == 11-3"+ , "308 == 11-4"+ , "309 == 11-5"+ , "310 == 11-6"+ , "311 == 11-7"+ , "312 == 11-8"+ , "313 == 11-9"+ , "314 == 11-10"+ , "315 == 11-11"+ , "316 == 11-12"+ , "317 == 11-13"+ , "318 == 11-14"+ , "319 == 11-15"+ , "320 == 11-16"+ , "321 == 11-17"+ , "322 == 11-18"+ , "323 == 11-19"+ , "324 == 11-20"+ , "325 == 11-21"+ , "326 == 11-22"+ , "327 == 11-23"+ , "328 == 11-24"+ , "329 == 11-25"+ , "330 == 11-26"+ , "331 == 11-27"+ , "332 == 11-28"+ , "333 == 11-29"+ , "334 == 11-30"+ , "335 == 12-1"+ , "336 == 12-2"+ , "337 == 12-3"+ , "338 == 12-4"+ , "339 == 12-5"+ , "340 == 12-6"+ , "341 == 12-7"+ , "342 == 12-8"+ , "343 == 12-9"+ , "344 == 12-10"+ , "345 == 12-11"+ , "346 == 12-12"+ , "347 == 12-13"+ , "348 == 12-14"+ , "349 == 12-15"+ , "350 == 12-16"+ , "351 == 12-17"+ , "352 == 12-18"+ , "353 == 12-19"+ , "354 == 12-20"+ , "355 == 12-21"+ , "356 == 12-22"+ , "357 == 12-23"+ , "358 == 12-24"+ , "359 == 12-25"+ , "360 == 12-26"+ , "361 == 12-27"+ , "362 == 12-28"+ , "363 == 12-29"+ , "364 == 12-30"+ , "365 == 12-31"+ , "DIFF: 366 -> 12-31 -> 365"+ , "DIFF: 367 -> 12-31 -> 365"+ , "DIFF: 368 -> 12-31 -> 365"+ , "DIFF: 369 -> 12-31 -> 365"+ , "Leap:"+ , "DIFF: -2 -> 1-1 -> 1"+ , "DIFF: -1 -> 1-1 -> 1"+ , "DIFF: 0 -> 1-1 -> 1"+ , "1 == 1-1"+ , "2 == 1-2"+ , "3 == 1-3"+ , "4 == 1-4"+ , "5 == 1-5"+ , "6 == 1-6"+ , "7 == 1-7"+ , "8 == 1-8"+ , "9 == 1-9"+ , "10 == 1-10"+ , "11 == 1-11"+ , "12 == 1-12"+ , "13 == 1-13"+ , "14 == 1-14"+ , "15 == 1-15"+ , "16 == 1-16"+ , "17 == 1-17"+ , "18 == 1-18"+ , "19 == 1-19"+ , "20 == 1-20"+ , "21 == 1-21"+ , "22 == 1-22"+ , "23 == 1-23"+ , "24 == 1-24"+ , "25 == 1-25"+ , "26 == 1-26"+ , "27 == 1-27"+ , "28 == 1-28"+ , "29 == 1-29"+ , "30 == 1-30"+ , "31 == 1-31"+ , "32 == 2-1"+ , "33 == 2-2"+ , "34 == 2-3"+ , "35 == 2-4"+ , "36 == 2-5"+ , "37 == 2-6"+ , "38 == 2-7"+ , "39 == 2-8"+ , "40 == 2-9"+ , "41 == 2-10"+ , "42 == 2-11"+ , "43 == 2-12"+ , "44 == 2-13"+ , "45 == 2-14"+ , "46 == 2-15"+ , "47 == 2-16"+ , "48 == 2-17"+ , "49 == 2-18"+ , "50 == 2-19"+ , "51 == 2-20"+ , "52 == 2-21"+ , "53 == 2-22"+ , "54 == 2-23"+ , "55 == 2-24"+ , "56 == 2-25"+ , "57 == 2-26"+ , "58 == 2-27"+ , "59 == 2-28"+ , "60 == 2-29"+ , "61 == 3-1"+ , "62 == 3-2"+ , "63 == 3-3"+ , "64 == 3-4"+ , "65 == 3-5"+ , "66 == 3-6"+ , "67 == 3-7"+ , "68 == 3-8"+ , "69 == 3-9"+ , "70 == 3-10"+ , "71 == 3-11"+ , "72 == 3-12"+ , "73 == 3-13"+ , "74 == 3-14"+ , "75 == 3-15"+ , "76 == 3-16"+ , "77 == 3-17"+ , "78 == 3-18"+ , "79 == 3-19"+ , "80 == 3-20"+ , "81 == 3-21"+ , "82 == 3-22"+ , "83 == 3-23"+ , "84 == 3-24"+ , "85 == 3-25"+ , "86 == 3-26"+ , "87 == 3-27"+ , "88 == 3-28"+ , "89 == 3-29"+ , "90 == 3-30"+ , "91 == 3-31"+ , "92 == 4-1"+ , "93 == 4-2"+ , "94 == 4-3"+ , "95 == 4-4"+ , "96 == 4-5"+ , "97 == 4-6"+ , "98 == 4-7"+ , "99 == 4-8"+ , "100 == 4-9"+ , "101 == 4-10"+ , "102 == 4-11"+ , "103 == 4-12"+ , "104 == 4-13"+ , "105 == 4-14"+ , "106 == 4-15"+ , "107 == 4-16"+ , "108 == 4-17"+ , "109 == 4-18"+ , "110 == 4-19"+ , "111 == 4-20"+ , "112 == 4-21"+ , "113 == 4-22"+ , "114 == 4-23"+ , "115 == 4-24"+ , "116 == 4-25"+ , "117 == 4-26"+ , "118 == 4-27"+ , "119 == 4-28"+ , "120 == 4-29"+ , "121 == 4-30"+ , "122 == 5-1"+ , "123 == 5-2"+ , "124 == 5-3"+ , "125 == 5-4"+ , "126 == 5-5"+ , "127 == 5-6"+ , "128 == 5-7"+ , "129 == 5-8"+ , "130 == 5-9"+ , "131 == 5-10"+ , "132 == 5-11"+ , "133 == 5-12"+ , "134 == 5-13"+ , "135 == 5-14"+ , "136 == 5-15"+ , "137 == 5-16"+ , "138 == 5-17"+ , "139 == 5-18"+ , "140 == 5-19"+ , "141 == 5-20"+ , "142 == 5-21"+ , "143 == 5-22"+ , "144 == 5-23"+ , "145 == 5-24"+ , "146 == 5-25"+ , "147 == 5-26"+ , "148 == 5-27"+ , "149 == 5-28"+ , "150 == 5-29"+ , "151 == 5-30"+ , "152 == 5-31"+ , "153 == 6-1"+ , "154 == 6-2"+ , "155 == 6-3"+ , "156 == 6-4"+ , "157 == 6-5"+ , "158 == 6-6"+ , "159 == 6-7"+ , "160 == 6-8"+ , "161 == 6-9"+ , "162 == 6-10"+ , "163 == 6-11"+ , "164 == 6-12"+ , "165 == 6-13"+ , "166 == 6-14"+ , "167 == 6-15"+ , "168 == 6-16"+ , "169 == 6-17"+ , "170 == 6-18"+ , "171 == 6-19"+ , "172 == 6-20"+ , "173 == 6-21"+ , "174 == 6-22"+ , "175 == 6-23"+ , "176 == 6-24"+ , "177 == 6-25"+ , "178 == 6-26"+ , "179 == 6-27"+ , "180 == 6-28"+ , "181 == 6-29"+ , "182 == 6-30"+ , "183 == 7-1"+ , "184 == 7-2"+ , "185 == 7-3"+ , "186 == 7-4"+ , "187 == 7-5"+ , "188 == 7-6"+ , "189 == 7-7"+ , "190 == 7-8"+ , "191 == 7-9"+ , "192 == 7-10"+ , "193 == 7-11"+ , "194 == 7-12"+ , "195 == 7-13"+ , "196 == 7-14"+ , "197 == 7-15"+ , "198 == 7-16"+ , "199 == 7-17"+ , "200 == 7-18"+ , "201 == 7-19"+ , "202 == 7-20"+ , "203 == 7-21"+ , "204 == 7-22"+ , "205 == 7-23"+ , "206 == 7-24"+ , "207 == 7-25"+ , "208 == 7-26"+ , "209 == 7-27"+ , "210 == 7-28"+ , "211 == 7-29"+ , "212 == 7-30"+ , "213 == 7-31"+ , "214 == 8-1"+ , "215 == 8-2"+ , "216 == 8-3"+ , "217 == 8-4"+ , "218 == 8-5"+ , "219 == 8-6"+ , "220 == 8-7"+ , "221 == 8-8"+ , "222 == 8-9"+ , "223 == 8-10"+ , "224 == 8-11"+ , "225 == 8-12"+ , "226 == 8-13"+ , "227 == 8-14"+ , "228 == 8-15"+ , "229 == 8-16"+ , "230 == 8-17"+ , "231 == 8-18"+ , "232 == 8-19"+ , "233 == 8-20"+ , "234 == 8-21"+ , "235 == 8-22"+ , "236 == 8-23"+ , "237 == 8-24"+ , "238 == 8-25"+ , "239 == 8-26"+ , "240 == 8-27"+ , "241 == 8-28"+ , "242 == 8-29"+ , "243 == 8-30"+ , "244 == 8-31"+ , "245 == 9-1"+ , "246 == 9-2"+ , "247 == 9-3"+ , "248 == 9-4"+ , "249 == 9-5"+ , "250 == 9-6"+ , "251 == 9-7"+ , "252 == 9-8"+ , "253 == 9-9"+ , "254 == 9-10"+ , "255 == 9-11"+ , "256 == 9-12"+ , "257 == 9-13"+ , "258 == 9-14"+ , "259 == 9-15"+ , "260 == 9-16"+ , "261 == 9-17"+ , "262 == 9-18"+ , "263 == 9-19"+ , "264 == 9-20"+ , "265 == 9-21"+ , "266 == 9-22"+ , "267 == 9-23"+ , "268 == 9-24"+ , "269 == 9-25"+ , "270 == 9-26"+ , "271 == 9-27"+ , "272 == 9-28"+ , "273 == 9-29"+ , "274 == 9-30"+ , "275 == 10-1"+ , "276 == 10-2"+ , "277 == 10-3"+ , "278 == 10-4"+ , "279 == 10-5"+ , "280 == 10-6"+ , "281 == 10-7"+ , "282 == 10-8"+ , "283 == 10-9"+ , "284 == 10-10"+ , "285 == 10-11"+ , "286 == 10-12"+ , "287 == 10-13"+ , "288 == 10-14"+ , "289 == 10-15"+ , "290 == 10-16"+ , "291 == 10-17"+ , "292 == 10-18"+ , "293 == 10-19"+ , "294 == 10-20"+ , "295 == 10-21"+ , "296 == 10-22"+ , "297 == 10-23"+ , "298 == 10-24"+ , "299 == 10-25"+ , "300 == 10-26"+ , "301 == 10-27"+ , "302 == 10-28"+ , "303 == 10-29"+ , "304 == 10-30"+ , "305 == 10-31"+ , "306 == 11-1"+ , "307 == 11-2"+ , "308 == 11-3"+ , "309 == 11-4"+ , "310 == 11-5"+ , "311 == 11-6"+ , "312 == 11-7"+ , "313 == 11-8"+ , "314 == 11-9"+ , "315 == 11-10"+ , "316 == 11-11"+ , "317 == 11-12"+ , "318 == 11-13"+ , "319 == 11-14"+ , "320 == 11-15"+ , "321 == 11-16"+ , "322 == 11-17"+ , "323 == 11-18"+ , "324 == 11-19"+ , "325 == 11-20"+ , "326 == 11-21"+ , "327 == 11-22"+ , "328 == 11-23"+ , "329 == 11-24"+ , "330 == 11-25"+ , "331 == 11-26"+ , "332 == 11-27"+ , "333 == 11-28"+ , "334 == 11-29"+ , "335 == 11-30"+ , "336 == 12-1"+ , "337 == 12-2"+ , "338 == 12-3"+ , "339 == 12-4"+ , "340 == 12-5"+ , "341 == 12-6"+ , "342 == 12-7"+ , "343 == 12-8"+ , "344 == 12-9"+ , "345 == 12-10"+ , "346 == 12-11"+ , "347 == 12-12"+ , "348 == 12-13"+ , "349 == 12-14"+ , "350 == 12-15"+ , "351 == 12-16"+ , "352 == 12-17"+ , "353 == 12-18"+ , "354 == 12-19"+ , "355 == 12-20"+ , "356 == 12-21"+ , "357 == 12-22"+ , "358 == 12-23"+ , "359 == 12-24"+ , "360 == 12-25"+ , "361 == 12-26"+ , "362 == 12-27"+ , "363 == 12-28"+ , "364 == 12-29"+ , "365 == 12-30"+ , "366 == 12-31"+ , "DIFF: 367 -> 12-31 -> 366"+ , "DIFF: 368 -> 12-31 -> 366"+ , "DIFF: 369 -> 12-31 -> 366" ]
+ Test/TestParseDAT.hs view
@@ -0,0 +1,53 @@+module Test.TestParseDAT where++import Data.Time+import Data.Time.Clock.TAI+import Test.TestUtil+import Test.TestParseDAT_Ref+import Test.TAI_UTC_DAT++tods :: [TimeOfDay]+tods = [+ TimeOfDay 0 0 0,+ TimeOfDay 0 0 0.5,+ TimeOfDay 0 0 1,+ TimeOfDay 0 0 1.5,+ TimeOfDay 0 0 2,+ TimeOfDay 23 59 28,+ TimeOfDay 23 59 28.5,+ TimeOfDay 23 59 29,+ TimeOfDay 23 59 29.5,+ TimeOfDay 23 59 30,+ TimeOfDay 23 59 30.5,+ TimeOfDay 23 59 31,+ TimeOfDay 23 59 31.5,+ TimeOfDay 23 59 32,+ TimeOfDay 23 59 59,+ TimeOfDay 23 59 59.5,+ TimeOfDay 23 59 60,+ TimeOfDay 23 59 60.5+ ]++times :: [LocalTime]+times =+ fmap (LocalTime (fromGregorian 1998 04 02)) tods +++ fmap (LocalTime (fromGregorian 1998 12 30)) tods +++ fmap (LocalTime (fromGregorian 1998 12 31)) tods +++ fmap (LocalTime (fromGregorian 1999 01 01)) tods +++ fmap (LocalTime (fromGregorian 1999 01 02)) tods++testParseDAT :: Test+testParseDAT = pureTest "testParseDAT" $ diff testParseDAT_Ref parseDAT where+ parseDAT = + let lst = parseTAIUTCDATFile taiUTC_DAT in + unlines $ map+ (\lt ->+ let+ utcTime = localTimeToUTC utc lt+ taiTime = utcToTAITime lst utcTime+ utcTime' = taiToUTCTime lst taiTime+ in if utcTime == utcTime'+ then unwords [show utcTime, "==", show taiTime]+ else unwords [ "correction:", show utcTime, "->", show taiTime, "->", show utcTime']+ )+ times
+ Test/TestParseDAT_Ref.hs view
@@ -0,0 +1,95 @@+module Test.TestParseDAT_Ref where++testParseDAT_Ref :: String+testParseDAT_Ref =+ unlines+ [ "1998-04-02 00:00:00 UTC == 1998-04-02 00:00:31 TAI"+ , "1998-04-02 00:00:00.5 UTC == 1998-04-02 00:00:31.5 TAI"+ , "1998-04-02 00:00:01 UTC == 1998-04-02 00:00:32 TAI"+ , "1998-04-02 00:00:01.5 UTC == 1998-04-02 00:00:32.5 TAI"+ , "1998-04-02 00:00:02 UTC == 1998-04-02 00:00:33 TAI"+ , "1998-04-02 23:59:28 UTC == 1998-04-02 23:59:59 TAI"+ , "1998-04-02 23:59:28.5 UTC == 1998-04-02 23:59:59.5 TAI"+ , "1998-04-02 23:59:29 UTC == 1998-04-03 00:00:00 TAI"+ , "1998-04-02 23:59:29.5 UTC == 1998-04-03 00:00:00.5 TAI"+ , "1998-04-02 23:59:30 UTC == 1998-04-03 00:00:01 TAI"+ , "1998-04-02 23:59:30.5 UTC == 1998-04-03 00:00:01.5 TAI"+ , "1998-04-02 23:59:31 UTC == 1998-04-03 00:00:02 TAI"+ , "1998-04-02 23:59:31.5 UTC == 1998-04-03 00:00:02.5 TAI"+ , "1998-04-02 23:59:32 UTC == 1998-04-03 00:00:03 TAI"+ , "1998-04-02 23:59:59 UTC == 1998-04-03 00:00:30 TAI"+ , "1998-04-02 23:59:59.5 UTC == 1998-04-03 00:00:30.5 TAI"+ , "correction: 1998-04-02 23:59:60 UTC -> 1998-04-03 00:00:31 TAI -> 1998-04-03 00:00:00 UTC"+ , "correction: 1998-04-02 23:59:60.5 UTC -> 1998-04-03 00:00:31.5 TAI -> 1998-04-03 00:00:00.5 UTC"+ , "1998-12-30 00:00:00 UTC == 1998-12-30 00:00:31 TAI"+ , "1998-12-30 00:00:00.5 UTC == 1998-12-30 00:00:31.5 TAI"+ , "1998-12-30 00:00:01 UTC == 1998-12-30 00:00:32 TAI"+ , "1998-12-30 00:00:01.5 UTC == 1998-12-30 00:00:32.5 TAI"+ , "1998-12-30 00:00:02 UTC == 1998-12-30 00:00:33 TAI"+ , "1998-12-30 23:59:28 UTC == 1998-12-30 23:59:59 TAI"+ , "1998-12-30 23:59:28.5 UTC == 1998-12-30 23:59:59.5 TAI"+ , "1998-12-30 23:59:29 UTC == 1998-12-31 00:00:00 TAI"+ , "1998-12-30 23:59:29.5 UTC == 1998-12-31 00:00:00.5 TAI"+ , "1998-12-30 23:59:30 UTC == 1998-12-31 00:00:01 TAI"+ , "1998-12-30 23:59:30.5 UTC == 1998-12-31 00:00:01.5 TAI"+ , "1998-12-30 23:59:31 UTC == 1998-12-31 00:00:02 TAI"+ , "1998-12-30 23:59:31.5 UTC == 1998-12-31 00:00:02.5 TAI"+ , "1998-12-30 23:59:32 UTC == 1998-12-31 00:00:03 TAI"+ , "1998-12-30 23:59:59 UTC == 1998-12-31 00:00:30 TAI"+ , "1998-12-30 23:59:59.5 UTC == 1998-12-31 00:00:30.5 TAI"+ , "correction: 1998-12-30 23:59:60 UTC -> 1998-12-31 00:00:31 TAI -> 1998-12-31 00:00:00 UTC"+ , "correction: 1998-12-30 23:59:60.5 UTC -> 1998-12-31 00:00:31.5 TAI -> 1998-12-31 00:00:00.5 UTC"+ , "1998-12-31 00:00:00 UTC == 1998-12-31 00:00:31 TAI"+ , "1998-12-31 00:00:00.5 UTC == 1998-12-31 00:00:31.5 TAI"+ , "1998-12-31 00:00:01 UTC == 1998-12-31 00:00:32 TAI"+ , "1998-12-31 00:00:01.5 UTC == 1998-12-31 00:00:32.5 TAI"+ , "1998-12-31 00:00:02 UTC == 1998-12-31 00:00:33 TAI"+ , "1998-12-31 23:59:28 UTC == 1998-12-31 23:59:59 TAI"+ , "1998-12-31 23:59:28.5 UTC == 1998-12-31 23:59:59.5 TAI"+ , "1998-12-31 23:59:29 UTC == 1999-01-01 00:00:00 TAI"+ , "1998-12-31 23:59:29.5 UTC == 1999-01-01 00:00:00.5 TAI"+ , "1998-12-31 23:59:30 UTC == 1999-01-01 00:00:01 TAI"+ , "1998-12-31 23:59:30.5 UTC == 1999-01-01 00:00:01.5 TAI"+ , "1998-12-31 23:59:31 UTC == 1999-01-01 00:00:02 TAI"+ , "1998-12-31 23:59:31.5 UTC == 1999-01-01 00:00:02.5 TAI"+ , "1998-12-31 23:59:32 UTC == 1999-01-01 00:00:03 TAI"+ , "1998-12-31 23:59:59 UTC == 1999-01-01 00:00:30 TAI"+ , "1998-12-31 23:59:59.5 UTC == 1999-01-01 00:00:30.5 TAI"+ , "1998-12-31 23:59:60 UTC == 1999-01-01 00:00:31 TAI"+ , "1998-12-31 23:59:60.5 UTC == 1999-01-01 00:00:31.5 TAI"+ , "1999-01-01 00:00:00 UTC == 1999-01-01 00:00:32 TAI"+ , "1999-01-01 00:00:00.5 UTC == 1999-01-01 00:00:32.5 TAI"+ , "1999-01-01 00:00:01 UTC == 1999-01-01 00:00:33 TAI"+ , "1999-01-01 00:00:01.5 UTC == 1999-01-01 00:00:33.5 TAI"+ , "1999-01-01 00:00:02 UTC == 1999-01-01 00:00:34 TAI"+ , "1999-01-01 23:59:28 UTC == 1999-01-02 00:00:00 TAI"+ , "1999-01-01 23:59:28.5 UTC == 1999-01-02 00:00:00.5 TAI"+ , "1999-01-01 23:59:29 UTC == 1999-01-02 00:00:01 TAI"+ , "1999-01-01 23:59:29.5 UTC == 1999-01-02 00:00:01.5 TAI"+ , "1999-01-01 23:59:30 UTC == 1999-01-02 00:00:02 TAI"+ , "1999-01-01 23:59:30.5 UTC == 1999-01-02 00:00:02.5 TAI"+ , "1999-01-01 23:59:31 UTC == 1999-01-02 00:00:03 TAI"+ , "1999-01-01 23:59:31.5 UTC == 1999-01-02 00:00:03.5 TAI"+ , "1999-01-01 23:59:32 UTC == 1999-01-02 00:00:04 TAI"+ , "1999-01-01 23:59:59 UTC == 1999-01-02 00:00:31 TAI"+ , "1999-01-01 23:59:59.5 UTC == 1999-01-02 00:00:31.5 TAI"+ , "correction: 1999-01-01 23:59:60 UTC -> 1999-01-02 00:00:32 TAI -> 1999-01-02 00:00:00 UTC"+ , "correction: 1999-01-01 23:59:60.5 UTC -> 1999-01-02 00:00:32.5 TAI -> 1999-01-02 00:00:00.5 UTC"+ , "1999-01-02 00:00:00 UTC == 1999-01-02 00:00:32 TAI"+ , "1999-01-02 00:00:00.5 UTC == 1999-01-02 00:00:32.5 TAI"+ , "1999-01-02 00:00:01 UTC == 1999-01-02 00:00:33 TAI"+ , "1999-01-02 00:00:01.5 UTC == 1999-01-02 00:00:33.5 TAI"+ , "1999-01-02 00:00:02 UTC == 1999-01-02 00:00:34 TAI"+ , "1999-01-02 23:59:28 UTC == 1999-01-03 00:00:00 TAI"+ , "1999-01-02 23:59:28.5 UTC == 1999-01-03 00:00:00.5 TAI"+ , "1999-01-02 23:59:29 UTC == 1999-01-03 00:00:01 TAI"+ , "1999-01-02 23:59:29.5 UTC == 1999-01-03 00:00:01.5 TAI"+ , "1999-01-02 23:59:30 UTC == 1999-01-03 00:00:02 TAI"+ , "1999-01-02 23:59:30.5 UTC == 1999-01-03 00:00:02.5 TAI"+ , "1999-01-02 23:59:31 UTC == 1999-01-03 00:00:03 TAI"+ , "1999-01-02 23:59:31.5 UTC == 1999-01-03 00:00:03.5 TAI"+ , "1999-01-02 23:59:32 UTC == 1999-01-03 00:00:04 TAI"+ , "1999-01-02 23:59:59 UTC == 1999-01-03 00:00:31 TAI"+ , "1999-01-02 23:59:59.5 UTC == 1999-01-03 00:00:31.5 TAI"+ , "correction: 1999-01-02 23:59:60 UTC -> 1999-01-03 00:00:32 TAI -> 1999-01-03 00:00:00 UTC"+ , "correction: 1999-01-02 23:59:60.5 UTC -> 1999-01-03 00:00:32.5 TAI -> 1999-01-03 00:00:00.5 UTC" ]
+ Test/TestParseTime.hs view
@@ -0,0 +1,438 @@+{-# OPTIONS -fno-warn-type-defaults -fno-warn-unused-binds -fno-warn-orphans #-}+{-# LANGUAGE FlexibleInstances, ExistentialQuantification #-}++module Test.TestParseTime where++import Control.Monad+import Data.Char+import Data.Ratio+import Data.Time+import Data.Time.Calendar.OrdinalDate+import Data.Time.Calendar.WeekDate+import Data.Time.Clock.POSIX+import System.Locale+import Test.QuickCheck hiding (Result)+import Test.TestUtil++ntest :: Int+ntest = 1000++type NamedProperty = (String, Property)++testParseTime :: Test+testParseTime = testGroup "testParseTime"+ [+ testGroup "extests" extests,+ testGroup "properties" (fmap (\(n,prop) -> testProperty n prop) properties)+ ]++yearDays :: Integer -> [Day]+yearDays y = [(fromGregorian y 1 1) .. (fromGregorian y 12 31)]++makeExhaustiveTest :: String -> [t] -> (t -> Test) -> Test+makeExhaustiveTest name cases f = testGroup name (fmap f cases)++extests :: [Test]+extests = [+ makeExhaustiveTest "parse %y" [0..99] parseYY,+ makeExhaustiveTest "parse %-C %y 1900s" [0,1,50,99] (parseCYY 19),+ makeExhaustiveTest "parse %-C %y 2000s" [0,1,50,99] (parseCYY 20),+ makeExhaustiveTest "parse %-C %y 1400s" [0,1,50,99] (parseCYY 14),+ makeExhaustiveTest "parse %C %y 0700s" [0,1,50,99] (parseCYY2 7),+ makeExhaustiveTest "parse %-C %y 700s" [0,1,50,99] (parseCYY 7),+ makeExhaustiveTest "parse %-C %y 10000s" [0,1,50,99] (parseCYY 100),+ makeExhaustiveTest "parse %-C centuries" [20..100] (parseCentury " "),+ makeExhaustiveTest "parse %-C century X" [1,10,20,100] (parseCentury "X"),+ makeExhaustiveTest "parse %-C century 2sp" [1,10,20,100] (parseCentury " "),+ makeExhaustiveTest "parse %-C century 5sp" [1,10,20,100] (parseCentury " ")+ ] +++ (concat $ fmap+ (\y -> [+ (makeExhaustiveTest "parse %Y%m%d" (yearDays y) parseYMD),+ (makeExhaustiveTest "parse %Y %m %d" (yearDays y) parseYearDayD),+ (makeExhaustiveTest "parse %Y %-m %e" (yearDays y) parseYearDayE)+ ]) [1,4,20,753,2000,2011,10001])++parseYMD :: Day -> Test+parseYMD day = case toGregorian day of+ (y,m,d) -> parseTest (Just day) "%Y%m%d" ((show y) ++ (show2 m) ++ (show2 d))++parseYearDayD :: Day -> Test+parseYearDayD day = case toGregorian day of+ (y,m,d) -> parseTest (Just day) "%Y %m %d" ((show y) ++ " " ++ (show2 m) ++ " " ++ (show2 d))++parseYearDayE :: Day -> Test+parseYearDayE day = case toGregorian day of+ (y,m,d) -> parseTest (Just day) "%Y %-m %e" ((show y) ++ " " ++ (show m) ++ " " ++ (show d))++-- | 1969 - 2068+expectedYear :: Integer -> Integer+expectedYear i | i >= 69 = 1900 + i+expectedYear i = 2000 + i++show2 :: (Show n,Integral n) => n -> String+show2 i = (show (div i 10)) ++ (show (mod i 10))++parseYY :: Integer -> Test+parseYY i = parseTest (Just (fromGregorian (expectedYear i) 1 1)) "%y" (show2 i)++parseCYY :: Integer -> Integer -> Test+parseCYY c i = parseTest (Just (fromGregorian ((c * 100) + i) 1 1)) "%-C %y" ((show c) ++ " " ++ (show2 i))++parseCYY2 :: Integer -> Integer -> Test+parseCYY2 c i = parseTest (Just (fromGregorian ((c * 100) + i) 1 1)) "%C %y" ((show2 c) ++ " " ++ (show2 i))++parseCentury :: String -> Integer -> Test+parseCentury int c = parseTest (Just (fromGregorian (c * 100) 1 1)) ("%-C" ++ int ++ "%y") ((show c) ++ int ++ "00")++parseTest :: (Show t, Eq t, ParseTime t) => Maybe t -> String -> String -> Test+parseTest expected formatStr target = + let+ found = parse formatStr target+ result = diff expected found+ name = (show formatStr) ++ " of " ++ (show target)+ in pureTest name result++readsTest :: (Show t, Eq t, ParseTime t) => Maybe t -> String -> String -> Test+readsTest expected formatStr target = + let+ ff (Just e) = [(e,"")]+ ff Nothing = []+ found = readsTime defaultTimeLocale formatStr target+ result = diff (ff expected) found+ name = (show formatStr) ++ " of " ++ (show target)+ in pureTest name result++parse :: ParseTime t => String -> String -> Maybe t+parse f t = parseTime defaultTimeLocale f t++format :: (FormatTime t) => String -> t -> String+format f t = formatTime defaultTimeLocale f t++instance Arbitrary Day where+ arbitrary = liftM ModifiedJulianDay $ choose (-313698, 2973483) -- 1000-01-1 to 9999-12-31++instance CoArbitrary Day where+ coarbitrary (ModifiedJulianDay d) = coarbitrary d++instance Arbitrary DiffTime where+ arbitrary = oneof [intSecs, fracSecs] -- up to 1 leap second+ where intSecs = liftM secondsToDiffTime' $ choose (0, 86400)+ fracSecs = liftM picosecondsToDiffTime' $ choose (0, 86400 * 10^12)+ secondsToDiffTime' :: Integer -> DiffTime+ secondsToDiffTime' = fromInteger+ picosecondsToDiffTime' :: Integer -> DiffTime+ picosecondsToDiffTime' x = fromRational (x % 10^12)++instance CoArbitrary DiffTime where+ coarbitrary t = coarbitrary (fromEnum t)++instance Arbitrary TimeOfDay where+ arbitrary = liftM timeToTimeOfDay arbitrary++instance CoArbitrary TimeOfDay where+ coarbitrary t = coarbitrary (timeOfDayToTime t)++instance Arbitrary LocalTime where+ arbitrary = liftM2 LocalTime arbitrary arbitrary++instance CoArbitrary LocalTime where+ coarbitrary t = coarbitrary (truncate (utcTimeToPOSIXSeconds (localTimeToUTC utc t)) :: Integer)++instance Arbitrary TimeZone where+ arbitrary = liftM minutesToTimeZone $ choose (-720,720)++instance CoArbitrary TimeZone where+ coarbitrary tz = coarbitrary (timeZoneMinutes tz)++instance Arbitrary ZonedTime where+ arbitrary = liftM2 ZonedTime arbitrary arbitrary++instance CoArbitrary ZonedTime where+ coarbitrary t = coarbitrary (truncate (utcTimeToPOSIXSeconds (zonedTimeToUTC t)) :: Integer)++instance Arbitrary UTCTime where+ arbitrary = liftM2 UTCTime arbitrary arbitrary++instance CoArbitrary UTCTime where+ coarbitrary t = coarbitrary (truncate (utcTimeToPOSIXSeconds t) :: Integer)++-- missing from the time package+instance Eq ZonedTime where+ ZonedTime t1 tz1 == ZonedTime t2 tz2 = t1 == t2 && tz1 == tz2++-- +-- * tests for dbugging failing cases+--++test_parse_format :: (FormatTime t,ParseTime t,Show t) => String -> t -> (String,String,Maybe t)+test_parse_format f t = let s = format f t in (show t, s, parse f s `asTypeOf` Just t)++--+-- * show and read +--++prop_read_show :: (Read a, Show a, Eq a) => a -> Bool+prop_read_show t = read (show t) == t++--+-- * special show functions+--++prop_parse_showWeekDate :: Day -> Bool+prop_parse_showWeekDate d = parse "%G-W%V-%u" (showWeekDate d) == Just d++prop_parse_showGregorian :: Day -> Bool+prop_parse_showGregorian d = parse "%Y-%m-%d" (showGregorian d) == Just d++prop_parse_showOrdinalDate :: Day -> Bool+prop_parse_showOrdinalDate d = parse "%Y-%j" (showOrdinalDate d) == Just d++--+-- * fromMondayStartWeek and fromSundayStartWeek+--++prop_fromMondayStartWeek :: Day -> Bool+prop_fromMondayStartWeek d = + let (w,wd) = mondayStartWeek d+ (y,_,_) = toGregorian d+ in fromMondayStartWeek y w wd == d++prop_fromSundayStartWeek :: Day -> Bool+prop_fromSundayStartWeek d = + let (w,wd) = sundayStartWeek d+ (y,_,_) = toGregorian d+ in fromSundayStartWeek y w wd == d++--+-- * format and parse +--++-- | Helper for defining named properties.+prop_named :: (Arbitrary t, Show t, Testable a)+ => String -> (FormatString s -> t -> a) -> String -> FormatString s -> NamedProperty+prop_named n prop typeName f = (n ++ " " ++ typeName ++ " " ++ show f, property (prop f))++prop_parse_format :: (Eq t, FormatTime t, ParseTime t) => FormatString t -> t -> Bool+prop_parse_format (FormatString f) t = parse f (format f t) == Just t++prop_parse_format_named :: (Arbitrary t, Eq t, Show t, FormatTime t, ParseTime t) + => String -> FormatString t -> NamedProperty+prop_parse_format_named = prop_named "prop_parse_format" prop_parse_format++-- Verify case-insensitivity with upper case.+prop_parse_format_upper :: (Eq t, FormatTime t, ParseTime t) => FormatString t -> t -> Bool+prop_parse_format_upper (FormatString f) t = parse f (map toUpper $ format f t) == Just t++prop_parse_format_upper_named :: (Arbitrary t, Eq t, Show t, FormatTime t, ParseTime t) + => String -> FormatString t -> NamedProperty+prop_parse_format_upper_named = prop_named "prop_parse_format_upper" prop_parse_format_upper++-- Verify case-insensitivity with lower case.+prop_parse_format_lower :: (Eq t, FormatTime t, ParseTime t) => FormatString t -> t -> Bool+prop_parse_format_lower (FormatString f) t = parse f (map toLower $ format f t) == Just t++prop_parse_format_lower_named :: (Arbitrary t, Eq t, Show t, FormatTime t, ParseTime t) + => String -> FormatString t -> NamedProperty+prop_parse_format_lower_named = prop_named "prop_parse_format_lower" prop_parse_format_lower++prop_format_parse_format :: (FormatTime t, ParseTime t) => FormatString t -> t -> Bool+prop_format_parse_format (FormatString f) t = + fmap (format f) (parse f (format f t) `asTypeOf` Just t) == Just (format f t)++prop_format_parse_format_named :: (Arbitrary t, Show t, FormatTime t, ParseTime t) + => String -> FormatString t -> NamedProperty+prop_format_parse_format_named = prop_named "prop_format_parse_format" prop_format_parse_format++--+-- * crashes in parse+--++newtype Input = Input String++instance Show Input where+ show (Input s) = s++instance Arbitrary Input where+ arbitrary = liftM Input $ list cs+ where cs = elements (['0'..'9'] ++ ['-',' ','/'] ++ ['a'..'z'] ++ ['A' .. 'Z'])+ list g = sized (\n -> choose (0,n) >>= \l -> replicateM l g)+instance CoArbitrary Input where+ coarbitrary (Input s) = coarbitrary (sum (map ord s))++prop_no_crash_bad_input :: (Eq t, ParseTime t) => FormatString t -> Input -> Property+prop_no_crash_bad_input fs@(FormatString f) (Input s) = property $ + case parse f s of+ Nothing -> True+ Just t -> t == t `asTypeOf` formatType fs+ where +prop_no_crash_bad_input_named :: (Eq t, ParseTime t)+ => String -> FormatString t -> NamedProperty+prop_no_crash_bad_input_named = prop_named "prop_no_crash_bad_input" prop_no_crash_bad_input++--+--+--++newtype FormatString a = FormatString String++formatType :: FormatString t -> t+formatType _ = undefined++castFormatString :: FormatString a -> FormatString b+castFormatString (FormatString f) = FormatString f++instance Show (FormatString a) where+ show (FormatString f) = show f++properties :: [NamedProperty]+properties = + [("prop_fromMondayStartWeek", property prop_fromMondayStartWeek),+ ("prop_fromSundayStartWeek", property prop_fromSundayStartWeek)]+ ++ [("prop_read_show Day", property (prop_read_show :: Day -> Bool)),+ ("prop_read_show TimeOfDay", property (prop_read_show :: TimeOfDay -> Bool)),+ ("prop_read_show LocalTime", property (prop_read_show :: LocalTime -> Bool)),+ ("prop_read_show TimeZone", property (prop_read_show :: TimeZone -> Bool)),+ ("prop_read_show ZonedTime", property (prop_read_show :: ZonedTime -> Bool)),+ ("prop_read_show UTCTime", property (prop_read_show :: UTCTime -> Bool))]+ ++ [("prop_parse_showWeekDate", property prop_parse_showWeekDate),+ ("prop_parse_showGregorian", property prop_parse_showGregorian),+ ("prop_parse_showOrdinalDate", property prop_parse_showOrdinalDate)]++ ++ map (prop_parse_format_named "Day") dayFormats+ ++ map (prop_parse_format_named "TimeOfDay") timeOfDayFormats+ ++ map (prop_parse_format_named "LocalTime") localTimeFormats+ ++ map (prop_parse_format_named "TimeZone") timeZoneFormats+ ++ map (prop_parse_format_named "ZonedTime") zonedTimeFormats+ ++ map (prop_parse_format_named "UTCTime") utcTimeFormats++ ++ map (prop_parse_format_upper_named "Day") dayFormats+ ++ map (prop_parse_format_upper_named "TimeOfDay") timeOfDayFormats+ ++ map (prop_parse_format_upper_named "LocalTime") localTimeFormats+ ++ map (prop_parse_format_upper_named "TimeZone") timeZoneFormats+ ++ map (prop_parse_format_upper_named "ZonedTime") zonedTimeFormats+ ++ map (prop_parse_format_upper_named "UTCTime") utcTimeFormats++ ++ map (prop_parse_format_lower_named "Day") dayFormats+ ++ map (prop_parse_format_lower_named "TimeOfDay") timeOfDayFormats+ ++ map (prop_parse_format_lower_named "LocalTime") localTimeFormats+ ++ map (prop_parse_format_lower_named "TimeZone") timeZoneFormats+ ++ map (prop_parse_format_lower_named "ZonedTime") zonedTimeFormats+ ++ map (prop_parse_format_lower_named "UTCTime") utcTimeFormats++ ++ map (prop_format_parse_format_named "Day") partialDayFormats+ ++ map (prop_format_parse_format_named "TimeOfDay") partialTimeOfDayFormats+ ++ map (prop_format_parse_format_named "LocalTime") partialLocalTimeFormats+ ++ map (prop_format_parse_format_named "ZonedTime") partialZonedTimeFormats+ ++ map (prop_format_parse_format_named "UTCTime") partialUTCTimeFormats++ ++ map (prop_no_crash_bad_input_named "Day") (dayFormats ++ partialDayFormats ++ failingPartialDayFormats)+ ++ map (prop_no_crash_bad_input_named "TimeOfDay") (timeOfDayFormats ++ partialTimeOfDayFormats)+ ++ map (prop_no_crash_bad_input_named "LocalTime") (localTimeFormats ++ partialLocalTimeFormats)+ ++ map (prop_no_crash_bad_input_named "TimeZone") (timeZoneFormats)+ ++ map (prop_no_crash_bad_input_named "ZonedTime") (zonedTimeFormats ++ partialZonedTimeFormats)+ ++ map (prop_no_crash_bad_input_named "UTCTime") (utcTimeFormats ++ partialUTCTimeFormats)++++dayFormats :: [FormatString Day]+dayFormats = map FormatString+ [+ -- numeric year, month, day+ "%Y-%m-%d","%Y%m%d","%C%y%m%d","%Y %m %e","%m/%d/%Y","%d/%m/%Y","%Y/%d/%m","%D %C","%F",+ -- month names+ "%Y-%B-%d","%Y-%b-%d","%Y-%h-%d",+ -- ordinal dates+ "%Y-%j",+ -- ISO week dates+ "%G-%V-%u","%G-%V-%a","%G-%V-%A","%G-%V-%w", "%A week %V, %G", "day %V, week %A, %G",+ "%G-W%V-%u",+ "%f%g-%V-%u","%f%g-%V-%a","%f%g-%V-%A","%f%g-%V-%w", "%A week %V, %f%g", "day %V, week %A, %f%g",+ "%f%g-W%V-%u",+ -- monday and sunday week dates+ "%Y-w%U-%A", "%Y-w%W-%A", "%Y-%A-w%U", "%Y-%A-w%W", "%A week %U, %Y", "%A week %W, %Y"+ ]++timeOfDayFormats :: [FormatString TimeOfDay]+timeOfDayFormats = map FormatString+ [+ -- 24 h formats+ "%H:%M:%S.%q","%k:%M:%S.%q","%H%M%S.%q","%T.%q","%X.%q","%R:%S.%q",+ "%H:%M:%S%Q","%k:%M:%S%Q","%H%M%S%Q","%T%Q","%X%Q","%R:%S%Q",+ -- 12 h formats+ "%I:%M:%S.%q %p","%I:%M:%S.%q %P","%l:%M:%S.%q %p","%r %q",+ "%I:%M:%S%Q %p","%I:%M:%S%Q %P","%l:%M:%S%Q %p","%r %Q"+ ]++localTimeFormats :: [FormatString LocalTime]+localTimeFormats = map FormatString $ + []+{-+ -- there's soo many of them...+ concat [ [df ++ " " ++ tf, tf ++ " " ++ df] | FormatString df <- dayFormats, + FormatString tf <- timeOfDayFormats]+-}++timeZoneFormats :: [FormatString TimeZone]+timeZoneFormats = map FormatString ["%z","%z%Z","%Z%z","%Z"]++zonedTimeFormats :: [FormatString ZonedTime]+zonedTimeFormats = map FormatString+ ["%a, %d %b %Y %H:%M:%S.%q %z", "%a, %d %b %Y %H:%M:%S%Q %z", "%s.%q %z", "%s%Q %z",+ "%a, %d %b %Y %H:%M:%S.%q %Z", "%a, %d %b %Y %H:%M:%S%Q %Z", "%s.%q %Z", "%s%Q %Z"]++utcTimeFormats :: [FormatString UTCTime]+utcTimeFormats = map FormatString + ["%s.%q","%s%Q"]++--+-- * Formats that do not include all the information+--++partialDayFormats :: [FormatString Day]+partialDayFormats = map FormatString+ [ ]++partialTimeOfDayFormats :: [FormatString TimeOfDay]+partialTimeOfDayFormats = map FormatString+ [ ]++partialLocalTimeFormats :: [FormatString LocalTime]+partialLocalTimeFormats = map FormatString + [ ]++partialZonedTimeFormats :: [FormatString ZonedTime]+partialZonedTimeFormats = map FormatString + [+ -- %s does not include second decimals+ "%s %z",+ -- %S does not include second decimals+ "%c", "%a, %d %b %Y %H:%M:%S %Z"+ ]++partialUTCTimeFormats :: [FormatString UTCTime]+partialUTCTimeFormats = map FormatString + [+ -- %s does not include second decimals+ "%s",+ -- %c does not include second decimals+ "%c"+ ]+++--+-- * Known failures+--++knownFailures :: [NamedProperty]+knownFailures =+ map (prop_format_parse_format_named "Day") failingPartialDayFormats++failingPartialDayFormats :: [FormatString Day]+failingPartialDayFormats = map FormatString+ [ -- ISO week dates with two digit year. + -- This can fail in the beginning or the end of a year where+ -- the ISO week date year does not match the gregorian year.+ "%g-%V-%u","%g-%V-%a","%g-%V-%A","%g-%V-%w", "%A week %V, %g", "day %V, week %A, %g",+ "%g-W%V-%u"+ ]
+ Test/TestTime.hs view
@@ -0,0 +1,106 @@+module Test.TestTime where++import Data.Time.Calendar.OrdinalDate+import Data.Time.Calendar.WeekDate+import Data.Time+import Test.TestUtil+import Test.TestTimeRef++showCal :: Integer -> String+showCal mjd+ = let date = ModifiedJulianDay mjd+ (y,m,d) = toGregorian date+ date' = fromGregorian y m d+ in concat [ show mjd ++ "="+ ++ showGregorian date ++ "=" + ++ showOrdinalDate date ++ "="+ ++ showWeekDate date+ ++ "\n"++ , if date == date'+ then "" + else "=" ++ (show $ toModifiedJulianDay date') ++ "!" ]++testCal :: String+testCal+ = concat+ -- days around 1 BCE/1 CE+ [ concatMap showCal [-678950 .. -678930] ++ -- days around 1000 CE+ , concatMap showCal [-313710 .. -313690] ++ -- days around MJD zero+ , concatMap showCal [-30..30] + , showCal 40000+ , showCal 50000++ -- 1900 not a leap year+ , showCal 15078+ , showCal 15079++ -- 1980 is a leap year+ , showCal 44297+ , showCal 44298+ , showCal 44299++ -- 1990 not a leap year+ , showCal 47950+ , showCal 47951++ -- 2000 is a leap year+ , showCal 51602+ , showCal 51603+ , showCal 51604++ -- years 2000 and 2001, plus some slop+ , concatMap showCal [51540..52280] ]++showUTCTime :: UTCTime -> String+showUTCTime (UTCTime d t) = show (toModifiedJulianDay d) ++ "," ++ show t++myzone :: TimeZone+myzone = hoursToTimeZone (- 8)++leapSec1998Cal :: LocalTime+leapSec1998Cal = LocalTime (fromGregorian 1998 12 31) (TimeOfDay 23 59 60.5)++leapSec1998 :: UTCTime+leapSec1998 = localTimeToUTC utc leapSec1998Cal++testUTC :: String+testUTC+ = let lsMineCal = utcToLocalTime myzone leapSec1998+ lsMine = localTimeToUTC myzone lsMineCal+ in unlines [ showCal 51178+ , show leapSec1998Cal+ , showUTCTime leapSec1998+ , show lsMineCal+ , showUTCTime lsMine ]++neglong :: Rational+neglong = -120++poslong :: Rational+poslong = 120++testUT1 :: String+testUT1+ = unlines [ show $ ut1ToLocalTime 0 $ ModJulianDate 51604.0+ , show $ ut1ToLocalTime 0 $ ModJulianDate 51604.5+ , show $ ut1ToLocalTime neglong $ ModJulianDate 51604.0+ , show $ ut1ToLocalTime neglong $ ModJulianDate 51604.5+ , show $ ut1ToLocalTime poslong $ ModJulianDate 51604.0+ , show $ ut1ToLocalTime poslong $ ModJulianDate 51604.5 ]++testTimeOfDayToDayFraction :: String+testTimeOfDayToDayFraction+ = let f = dayFractionToTimeOfDay . timeOfDayToDayFraction+ in unlines [ show $ f $ TimeOfDay 12 34 56.789+ , show $ f $ TimeOfDay 12 34 56.789123+ , show $ f $ TimeOfDay 12 34 56.789123456+ , show $ f $ TimeOfDay 12 34 56.789123456789 ]++testTime :: Test+testTime = pureTest "testTime" $+ diff testTimeRef $ unlines [testCal, testUTC, testUT1, testTimeOfDayToDayFraction]
+ Test/TestTimeRef.hs view
@@ -0,0 +1,881 @@+module Test.TestTimeRef where++testTimeRef :: String+testTimeRef = + unlines [+ "-678950=-0001-12-23=-0001-357=-0001-W51-4"+ ,"-678949=-0001-12-24=-0001-358=-0001-W51-5"+ ,"-678948=-0001-12-25=-0001-359=-0001-W51-6"+ ,"-678947=-0001-12-26=-0001-360=-0001-W51-7"+ ,"-678946=-0001-12-27=-0001-361=-0001-W52-1"+ ,"-678945=-0001-12-28=-0001-362=-0001-W52-2"+ ,"-678944=-0001-12-29=-0001-363=-0001-W52-3"+ ,"-678943=-0001-12-30=-0001-364=-0001-W52-4"+ ,"-678942=-0001-12-31=-0001-365=-0001-W52-5"+ ,"-678941=0000-01-01=0000-001=-0001-W52-6"+ ,"-678940=0000-01-02=0000-002=-0001-W52-7"+ ,"-678939=0000-01-03=0000-003=0000-W01-1"+ ,"-678938=0000-01-04=0000-004=0000-W01-2"+ ,"-678937=0000-01-05=0000-005=0000-W01-3"+ ,"-678936=0000-01-06=0000-006=0000-W01-4"+ ,"-678935=0000-01-07=0000-007=0000-W01-5"+ ,"-678934=0000-01-08=0000-008=0000-W01-6"+ ,"-678933=0000-01-09=0000-009=0000-W01-7"+ ,"-678932=0000-01-10=0000-010=0000-W02-1"+ ,"-678931=0000-01-11=0000-011=0000-W02-2"+ ,"-678930=0000-01-12=0000-012=0000-W02-3"+ ,"-313710=0999-12-20=0999-354=0999-W51-5"+ ,"-313709=0999-12-21=0999-355=0999-W51-6"+ ,"-313708=0999-12-22=0999-356=0999-W51-7"+ ,"-313707=0999-12-23=0999-357=0999-W52-1"+ ,"-313706=0999-12-24=0999-358=0999-W52-2"+ ,"-313705=0999-12-25=0999-359=0999-W52-3"+ ,"-313704=0999-12-26=0999-360=0999-W52-4"+ ,"-313703=0999-12-27=0999-361=0999-W52-5"+ ,"-313702=0999-12-28=0999-362=0999-W52-6"+ ,"-313701=0999-12-29=0999-363=0999-W52-7"+ ,"-313700=0999-12-30=0999-364=1000-W01-1"+ ,"-313699=0999-12-31=0999-365=1000-W01-2"+ ,"-313698=1000-01-01=1000-001=1000-W01-3"+ ,"-313697=1000-01-02=1000-002=1000-W01-4"+ ,"-313696=1000-01-03=1000-003=1000-W01-5"+ ,"-313695=1000-01-04=1000-004=1000-W01-6"+ ,"-313694=1000-01-05=1000-005=1000-W01-7"+ ,"-313693=1000-01-06=1000-006=1000-W02-1"+ ,"-313692=1000-01-07=1000-007=1000-W02-2"+ ,"-313691=1000-01-08=1000-008=1000-W02-3"+ ,"-313690=1000-01-09=1000-009=1000-W02-4"+ ,"-30=1858-10-18=1858-291=1858-W42-1"+ ,"-29=1858-10-19=1858-292=1858-W42-2"+ ,"-28=1858-10-20=1858-293=1858-W42-3"+ ,"-27=1858-10-21=1858-294=1858-W42-4"+ ,"-26=1858-10-22=1858-295=1858-W42-5"+ ,"-25=1858-10-23=1858-296=1858-W42-6"+ ,"-24=1858-10-24=1858-297=1858-W42-7"+ ,"-23=1858-10-25=1858-298=1858-W43-1"+ ,"-22=1858-10-26=1858-299=1858-W43-2"+ ,"-21=1858-10-27=1858-300=1858-W43-3"+ ,"-20=1858-10-28=1858-301=1858-W43-4"+ ,"-19=1858-10-29=1858-302=1858-W43-5"+ ,"-18=1858-10-30=1858-303=1858-W43-6"+ ,"-17=1858-10-31=1858-304=1858-W43-7"+ ,"-16=1858-11-01=1858-305=1858-W44-1"+ ,"-15=1858-11-02=1858-306=1858-W44-2"+ ,"-14=1858-11-03=1858-307=1858-W44-3"+ ,"-13=1858-11-04=1858-308=1858-W44-4"+ ,"-12=1858-11-05=1858-309=1858-W44-5"+ ,"-11=1858-11-06=1858-310=1858-W44-6"+ ,"-10=1858-11-07=1858-311=1858-W44-7"+ ,"-9=1858-11-08=1858-312=1858-W45-1"+ ,"-8=1858-11-09=1858-313=1858-W45-2"+ ,"-7=1858-11-10=1858-314=1858-W45-3"+ ,"-6=1858-11-11=1858-315=1858-W45-4"+ ,"-5=1858-11-12=1858-316=1858-W45-5"+ ,"-4=1858-11-13=1858-317=1858-W45-6"+ ,"-3=1858-11-14=1858-318=1858-W45-7"+ ,"-2=1858-11-15=1858-319=1858-W46-1"+ ,"-1=1858-11-16=1858-320=1858-W46-2"+ ,"0=1858-11-17=1858-321=1858-W46-3"+ ,"1=1858-11-18=1858-322=1858-W46-4"+ ,"2=1858-11-19=1858-323=1858-W46-5"+ ,"3=1858-11-20=1858-324=1858-W46-6"+ ,"4=1858-11-21=1858-325=1858-W46-7"+ ,"5=1858-11-22=1858-326=1858-W47-1"+ ,"6=1858-11-23=1858-327=1858-W47-2"+ ,"7=1858-11-24=1858-328=1858-W47-3"+ ,"8=1858-11-25=1858-329=1858-W47-4"+ ,"9=1858-11-26=1858-330=1858-W47-5"+ ,"10=1858-11-27=1858-331=1858-W47-6"+ ,"11=1858-11-28=1858-332=1858-W47-7"+ ,"12=1858-11-29=1858-333=1858-W48-1"+ ,"13=1858-11-30=1858-334=1858-W48-2"+ ,"14=1858-12-01=1858-335=1858-W48-3"+ ,"15=1858-12-02=1858-336=1858-W48-4"+ ,"16=1858-12-03=1858-337=1858-W48-5"+ ,"17=1858-12-04=1858-338=1858-W48-6"+ ,"18=1858-12-05=1858-339=1858-W48-7"+ ,"19=1858-12-06=1858-340=1858-W49-1"+ ,"20=1858-12-07=1858-341=1858-W49-2"+ ,"21=1858-12-08=1858-342=1858-W49-3"+ ,"22=1858-12-09=1858-343=1858-W49-4"+ ,"23=1858-12-10=1858-344=1858-W49-5"+ ,"24=1858-12-11=1858-345=1858-W49-6"+ ,"25=1858-12-12=1858-346=1858-W49-7"+ ,"26=1858-12-13=1858-347=1858-W50-1"+ ,"27=1858-12-14=1858-348=1858-W50-2"+ ,"28=1858-12-15=1858-349=1858-W50-3"+ ,"29=1858-12-16=1858-350=1858-W50-4"+ ,"30=1858-12-17=1858-351=1858-W50-5"+ ,"40000=1968-05-24=1968-145=1968-W21-5"+ ,"50000=1995-10-10=1995-283=1995-W41-2"+ ,"15078=1900-02-28=1900-059=1900-W09-3"+ ,"15079=1900-03-01=1900-060=1900-W09-4"+ ,"44297=1980-02-28=1980-059=1980-W09-4"+ ,"44298=1980-02-29=1980-060=1980-W09-5"+ ,"44299=1980-03-01=1980-061=1980-W09-6"+ ,"47950=1990-02-28=1990-059=1990-W09-3"+ ,"47951=1990-03-01=1990-060=1990-W09-4"+ ,"51602=2000-02-28=2000-059=2000-W09-1"+ ,"51603=2000-02-29=2000-060=2000-W09-2"+ ,"51604=2000-03-01=2000-061=2000-W09-3"+ ,"51540=1999-12-28=1999-362=1999-W52-2"+ ,"51541=1999-12-29=1999-363=1999-W52-3"+ ,"51542=1999-12-30=1999-364=1999-W52-4"+ ,"51543=1999-12-31=1999-365=1999-W52-5"+ ,"51544=2000-01-01=2000-001=1999-W52-6"+ ,"51545=2000-01-02=2000-002=1999-W52-7"+ ,"51546=2000-01-03=2000-003=2000-W01-1"+ ,"51547=2000-01-04=2000-004=2000-W01-2"+ ,"51548=2000-01-05=2000-005=2000-W01-3"+ ,"51549=2000-01-06=2000-006=2000-W01-4"+ ,"51550=2000-01-07=2000-007=2000-W01-5"+ ,"51551=2000-01-08=2000-008=2000-W01-6"+ ,"51552=2000-01-09=2000-009=2000-W01-7"+ ,"51553=2000-01-10=2000-010=2000-W02-1"+ ,"51554=2000-01-11=2000-011=2000-W02-2"+ ,"51555=2000-01-12=2000-012=2000-W02-3"+ ,"51556=2000-01-13=2000-013=2000-W02-4"+ ,"51557=2000-01-14=2000-014=2000-W02-5"+ ,"51558=2000-01-15=2000-015=2000-W02-6"+ ,"51559=2000-01-16=2000-016=2000-W02-7"+ ,"51560=2000-01-17=2000-017=2000-W03-1"+ ,"51561=2000-01-18=2000-018=2000-W03-2"+ ,"51562=2000-01-19=2000-019=2000-W03-3"+ ,"51563=2000-01-20=2000-020=2000-W03-4"+ ,"51564=2000-01-21=2000-021=2000-W03-5"+ ,"51565=2000-01-22=2000-022=2000-W03-6"+ ,"51566=2000-01-23=2000-023=2000-W03-7"+ ,"51567=2000-01-24=2000-024=2000-W04-1"+ ,"51568=2000-01-25=2000-025=2000-W04-2"+ ,"51569=2000-01-26=2000-026=2000-W04-3"+ ,"51570=2000-01-27=2000-027=2000-W04-4"+ ,"51571=2000-01-28=2000-028=2000-W04-5"+ ,"51572=2000-01-29=2000-029=2000-W04-6"+ ,"51573=2000-01-30=2000-030=2000-W04-7"+ ,"51574=2000-01-31=2000-031=2000-W05-1"+ ,"51575=2000-02-01=2000-032=2000-W05-2"+ ,"51576=2000-02-02=2000-033=2000-W05-3"+ ,"51577=2000-02-03=2000-034=2000-W05-4"+ ,"51578=2000-02-04=2000-035=2000-W05-5"+ ,"51579=2000-02-05=2000-036=2000-W05-6"+ ,"51580=2000-02-06=2000-037=2000-W05-7"+ ,"51581=2000-02-07=2000-038=2000-W06-1"+ ,"51582=2000-02-08=2000-039=2000-W06-2"+ ,"51583=2000-02-09=2000-040=2000-W06-3"+ ,"51584=2000-02-10=2000-041=2000-W06-4"+ ,"51585=2000-02-11=2000-042=2000-W06-5"+ ,"51586=2000-02-12=2000-043=2000-W06-6"+ ,"51587=2000-02-13=2000-044=2000-W06-7"+ ,"51588=2000-02-14=2000-045=2000-W07-1"+ ,"51589=2000-02-15=2000-046=2000-W07-2"+ ,"51590=2000-02-16=2000-047=2000-W07-3"+ ,"51591=2000-02-17=2000-048=2000-W07-4"+ ,"51592=2000-02-18=2000-049=2000-W07-5"+ ,"51593=2000-02-19=2000-050=2000-W07-6"+ ,"51594=2000-02-20=2000-051=2000-W07-7"+ ,"51595=2000-02-21=2000-052=2000-W08-1"+ ,"51596=2000-02-22=2000-053=2000-W08-2"+ ,"51597=2000-02-23=2000-054=2000-W08-3"+ ,"51598=2000-02-24=2000-055=2000-W08-4"+ ,"51599=2000-02-25=2000-056=2000-W08-5"+ ,"51600=2000-02-26=2000-057=2000-W08-6"+ ,"51601=2000-02-27=2000-058=2000-W08-7"+ ,"51602=2000-02-28=2000-059=2000-W09-1"+ ,"51603=2000-02-29=2000-060=2000-W09-2"+ ,"51604=2000-03-01=2000-061=2000-W09-3"+ ,"51605=2000-03-02=2000-062=2000-W09-4"+ ,"51606=2000-03-03=2000-063=2000-W09-5"+ ,"51607=2000-03-04=2000-064=2000-W09-6"+ ,"51608=2000-03-05=2000-065=2000-W09-7"+ ,"51609=2000-03-06=2000-066=2000-W10-1"+ ,"51610=2000-03-07=2000-067=2000-W10-2"+ ,"51611=2000-03-08=2000-068=2000-W10-3"+ ,"51612=2000-03-09=2000-069=2000-W10-4"+ ,"51613=2000-03-10=2000-070=2000-W10-5"+ ,"51614=2000-03-11=2000-071=2000-W10-6"+ ,"51615=2000-03-12=2000-072=2000-W10-7"+ ,"51616=2000-03-13=2000-073=2000-W11-1"+ ,"51617=2000-03-14=2000-074=2000-W11-2"+ ,"51618=2000-03-15=2000-075=2000-W11-3"+ ,"51619=2000-03-16=2000-076=2000-W11-4"+ ,"51620=2000-03-17=2000-077=2000-W11-5"+ ,"51621=2000-03-18=2000-078=2000-W11-6"+ ,"51622=2000-03-19=2000-079=2000-W11-7"+ ,"51623=2000-03-20=2000-080=2000-W12-1"+ ,"51624=2000-03-21=2000-081=2000-W12-2"+ ,"51625=2000-03-22=2000-082=2000-W12-3"+ ,"51626=2000-03-23=2000-083=2000-W12-4"+ ,"51627=2000-03-24=2000-084=2000-W12-5"+ ,"51628=2000-03-25=2000-085=2000-W12-6"+ ,"51629=2000-03-26=2000-086=2000-W12-7"+ ,"51630=2000-03-27=2000-087=2000-W13-1"+ ,"51631=2000-03-28=2000-088=2000-W13-2"+ ,"51632=2000-03-29=2000-089=2000-W13-3"+ ,"51633=2000-03-30=2000-090=2000-W13-4"+ ,"51634=2000-03-31=2000-091=2000-W13-5"+ ,"51635=2000-04-01=2000-092=2000-W13-6"+ ,"51636=2000-04-02=2000-093=2000-W13-7"+ ,"51637=2000-04-03=2000-094=2000-W14-1"+ ,"51638=2000-04-04=2000-095=2000-W14-2"+ ,"51639=2000-04-05=2000-096=2000-W14-3"+ ,"51640=2000-04-06=2000-097=2000-W14-4"+ ,"51641=2000-04-07=2000-098=2000-W14-5"+ ,"51642=2000-04-08=2000-099=2000-W14-6"+ ,"51643=2000-04-09=2000-100=2000-W14-7"+ ,"51644=2000-04-10=2000-101=2000-W15-1"+ ,"51645=2000-04-11=2000-102=2000-W15-2"+ ,"51646=2000-04-12=2000-103=2000-W15-3"+ ,"51647=2000-04-13=2000-104=2000-W15-4"+ ,"51648=2000-04-14=2000-105=2000-W15-5"+ ,"51649=2000-04-15=2000-106=2000-W15-6"+ ,"51650=2000-04-16=2000-107=2000-W15-7"+ ,"51651=2000-04-17=2000-108=2000-W16-1"+ ,"51652=2000-04-18=2000-109=2000-W16-2"+ ,"51653=2000-04-19=2000-110=2000-W16-3"+ ,"51654=2000-04-20=2000-111=2000-W16-4"+ ,"51655=2000-04-21=2000-112=2000-W16-5"+ ,"51656=2000-04-22=2000-113=2000-W16-6"+ ,"51657=2000-04-23=2000-114=2000-W16-7"+ ,"51658=2000-04-24=2000-115=2000-W17-1"+ ,"51659=2000-04-25=2000-116=2000-W17-2"+ ,"51660=2000-04-26=2000-117=2000-W17-3"+ ,"51661=2000-04-27=2000-118=2000-W17-4"+ ,"51662=2000-04-28=2000-119=2000-W17-5"+ ,"51663=2000-04-29=2000-120=2000-W17-6"+ ,"51664=2000-04-30=2000-121=2000-W17-7"+ ,"51665=2000-05-01=2000-122=2000-W18-1"+ ,"51666=2000-05-02=2000-123=2000-W18-2"+ ,"51667=2000-05-03=2000-124=2000-W18-3"+ ,"51668=2000-05-04=2000-125=2000-W18-4"+ ,"51669=2000-05-05=2000-126=2000-W18-5"+ ,"51670=2000-05-06=2000-127=2000-W18-6"+ ,"51671=2000-05-07=2000-128=2000-W18-7"+ ,"51672=2000-05-08=2000-129=2000-W19-1"+ ,"51673=2000-05-09=2000-130=2000-W19-2"+ ,"51674=2000-05-10=2000-131=2000-W19-3"+ ,"51675=2000-05-11=2000-132=2000-W19-4"+ ,"51676=2000-05-12=2000-133=2000-W19-5"+ ,"51677=2000-05-13=2000-134=2000-W19-6"+ ,"51678=2000-05-14=2000-135=2000-W19-7"+ ,"51679=2000-05-15=2000-136=2000-W20-1"+ ,"51680=2000-05-16=2000-137=2000-W20-2"+ ,"51681=2000-05-17=2000-138=2000-W20-3"+ ,"51682=2000-05-18=2000-139=2000-W20-4"+ ,"51683=2000-05-19=2000-140=2000-W20-5"+ ,"51684=2000-05-20=2000-141=2000-W20-6"+ ,"51685=2000-05-21=2000-142=2000-W20-7"+ ,"51686=2000-05-22=2000-143=2000-W21-1"+ ,"51687=2000-05-23=2000-144=2000-W21-2"+ ,"51688=2000-05-24=2000-145=2000-W21-3"+ ,"51689=2000-05-25=2000-146=2000-W21-4"+ ,"51690=2000-05-26=2000-147=2000-W21-5"+ ,"51691=2000-05-27=2000-148=2000-W21-6"+ ,"51692=2000-05-28=2000-149=2000-W21-7"+ ,"51693=2000-05-29=2000-150=2000-W22-1"+ ,"51694=2000-05-30=2000-151=2000-W22-2"+ ,"51695=2000-05-31=2000-152=2000-W22-3"+ ,"51696=2000-06-01=2000-153=2000-W22-4"+ ,"51697=2000-06-02=2000-154=2000-W22-5"+ ,"51698=2000-06-03=2000-155=2000-W22-6"+ ,"51699=2000-06-04=2000-156=2000-W22-7"+ ,"51700=2000-06-05=2000-157=2000-W23-1"+ ,"51701=2000-06-06=2000-158=2000-W23-2"+ ,"51702=2000-06-07=2000-159=2000-W23-3"+ ,"51703=2000-06-08=2000-160=2000-W23-4"+ ,"51704=2000-06-09=2000-161=2000-W23-5"+ ,"51705=2000-06-10=2000-162=2000-W23-6"+ ,"51706=2000-06-11=2000-163=2000-W23-7"+ ,"51707=2000-06-12=2000-164=2000-W24-1"+ ,"51708=2000-06-13=2000-165=2000-W24-2"+ ,"51709=2000-06-14=2000-166=2000-W24-3"+ ,"51710=2000-06-15=2000-167=2000-W24-4"+ ,"51711=2000-06-16=2000-168=2000-W24-5"+ ,"51712=2000-06-17=2000-169=2000-W24-6"+ ,"51713=2000-06-18=2000-170=2000-W24-7"+ ,"51714=2000-06-19=2000-171=2000-W25-1"+ ,"51715=2000-06-20=2000-172=2000-W25-2"+ ,"51716=2000-06-21=2000-173=2000-W25-3"+ ,"51717=2000-06-22=2000-174=2000-W25-4"+ ,"51718=2000-06-23=2000-175=2000-W25-5"+ ,"51719=2000-06-24=2000-176=2000-W25-6"+ ,"51720=2000-06-25=2000-177=2000-W25-7"+ ,"51721=2000-06-26=2000-178=2000-W26-1"+ ,"51722=2000-06-27=2000-179=2000-W26-2"+ ,"51723=2000-06-28=2000-180=2000-W26-3"+ ,"51724=2000-06-29=2000-181=2000-W26-4"+ ,"51725=2000-06-30=2000-182=2000-W26-5"+ ,"51726=2000-07-01=2000-183=2000-W26-6"+ ,"51727=2000-07-02=2000-184=2000-W26-7"+ ,"51728=2000-07-03=2000-185=2000-W27-1"+ ,"51729=2000-07-04=2000-186=2000-W27-2"+ ,"51730=2000-07-05=2000-187=2000-W27-3"+ ,"51731=2000-07-06=2000-188=2000-W27-4"+ ,"51732=2000-07-07=2000-189=2000-W27-5"+ ,"51733=2000-07-08=2000-190=2000-W27-6"+ ,"51734=2000-07-09=2000-191=2000-W27-7"+ ,"51735=2000-07-10=2000-192=2000-W28-1"+ ,"51736=2000-07-11=2000-193=2000-W28-2"+ ,"51737=2000-07-12=2000-194=2000-W28-3"+ ,"51738=2000-07-13=2000-195=2000-W28-4"+ ,"51739=2000-07-14=2000-196=2000-W28-5"+ ,"51740=2000-07-15=2000-197=2000-W28-6"+ ,"51741=2000-07-16=2000-198=2000-W28-7"+ ,"51742=2000-07-17=2000-199=2000-W29-1"+ ,"51743=2000-07-18=2000-200=2000-W29-2"+ ,"51744=2000-07-19=2000-201=2000-W29-3"+ ,"51745=2000-07-20=2000-202=2000-W29-4"+ ,"51746=2000-07-21=2000-203=2000-W29-5"+ ,"51747=2000-07-22=2000-204=2000-W29-6"+ ,"51748=2000-07-23=2000-205=2000-W29-7"+ ,"51749=2000-07-24=2000-206=2000-W30-1"+ ,"51750=2000-07-25=2000-207=2000-W30-2"+ ,"51751=2000-07-26=2000-208=2000-W30-3"+ ,"51752=2000-07-27=2000-209=2000-W30-4"+ ,"51753=2000-07-28=2000-210=2000-W30-5"+ ,"51754=2000-07-29=2000-211=2000-W30-6"+ ,"51755=2000-07-30=2000-212=2000-W30-7"+ ,"51756=2000-07-31=2000-213=2000-W31-1"+ ,"51757=2000-08-01=2000-214=2000-W31-2"+ ,"51758=2000-08-02=2000-215=2000-W31-3"+ ,"51759=2000-08-03=2000-216=2000-W31-4"+ ,"51760=2000-08-04=2000-217=2000-W31-5"+ ,"51761=2000-08-05=2000-218=2000-W31-6"+ ,"51762=2000-08-06=2000-219=2000-W31-7"+ ,"51763=2000-08-07=2000-220=2000-W32-1"+ ,"51764=2000-08-08=2000-221=2000-W32-2"+ ,"51765=2000-08-09=2000-222=2000-W32-3"+ ,"51766=2000-08-10=2000-223=2000-W32-4"+ ,"51767=2000-08-11=2000-224=2000-W32-5"+ ,"51768=2000-08-12=2000-225=2000-W32-6"+ ,"51769=2000-08-13=2000-226=2000-W32-7"+ ,"51770=2000-08-14=2000-227=2000-W33-1"+ ,"51771=2000-08-15=2000-228=2000-W33-2"+ ,"51772=2000-08-16=2000-229=2000-W33-3"+ ,"51773=2000-08-17=2000-230=2000-W33-4"+ ,"51774=2000-08-18=2000-231=2000-W33-5"+ ,"51775=2000-08-19=2000-232=2000-W33-6"+ ,"51776=2000-08-20=2000-233=2000-W33-7"+ ,"51777=2000-08-21=2000-234=2000-W34-1"+ ,"51778=2000-08-22=2000-235=2000-W34-2"+ ,"51779=2000-08-23=2000-236=2000-W34-3"+ ,"51780=2000-08-24=2000-237=2000-W34-4"+ ,"51781=2000-08-25=2000-238=2000-W34-5"+ ,"51782=2000-08-26=2000-239=2000-W34-6"+ ,"51783=2000-08-27=2000-240=2000-W34-7"+ ,"51784=2000-08-28=2000-241=2000-W35-1"+ ,"51785=2000-08-29=2000-242=2000-W35-2"+ ,"51786=2000-08-30=2000-243=2000-W35-3"+ ,"51787=2000-08-31=2000-244=2000-W35-4"+ ,"51788=2000-09-01=2000-245=2000-W35-5"+ ,"51789=2000-09-02=2000-246=2000-W35-6"+ ,"51790=2000-09-03=2000-247=2000-W35-7"+ ,"51791=2000-09-04=2000-248=2000-W36-1"+ ,"51792=2000-09-05=2000-249=2000-W36-2"+ ,"51793=2000-09-06=2000-250=2000-W36-3"+ ,"51794=2000-09-07=2000-251=2000-W36-4"+ ,"51795=2000-09-08=2000-252=2000-W36-5"+ ,"51796=2000-09-09=2000-253=2000-W36-6"+ ,"51797=2000-09-10=2000-254=2000-W36-7"+ ,"51798=2000-09-11=2000-255=2000-W37-1"+ ,"51799=2000-09-12=2000-256=2000-W37-2"+ ,"51800=2000-09-13=2000-257=2000-W37-3"+ ,"51801=2000-09-14=2000-258=2000-W37-4"+ ,"51802=2000-09-15=2000-259=2000-W37-5"+ ,"51803=2000-09-16=2000-260=2000-W37-6"+ ,"51804=2000-09-17=2000-261=2000-W37-7"+ ,"51805=2000-09-18=2000-262=2000-W38-1"+ ,"51806=2000-09-19=2000-263=2000-W38-2"+ ,"51807=2000-09-20=2000-264=2000-W38-3"+ ,"51808=2000-09-21=2000-265=2000-W38-4"+ ,"51809=2000-09-22=2000-266=2000-W38-5"+ ,"51810=2000-09-23=2000-267=2000-W38-6"+ ,"51811=2000-09-24=2000-268=2000-W38-7"+ ,"51812=2000-09-25=2000-269=2000-W39-1"+ ,"51813=2000-09-26=2000-270=2000-W39-2"+ ,"51814=2000-09-27=2000-271=2000-W39-3"+ ,"51815=2000-09-28=2000-272=2000-W39-4"+ ,"51816=2000-09-29=2000-273=2000-W39-5"+ ,"51817=2000-09-30=2000-274=2000-W39-6"+ ,"51818=2000-10-01=2000-275=2000-W39-7"+ ,"51819=2000-10-02=2000-276=2000-W40-1"+ ,"51820=2000-10-03=2000-277=2000-W40-2"+ ,"51821=2000-10-04=2000-278=2000-W40-3"+ ,"51822=2000-10-05=2000-279=2000-W40-4"+ ,"51823=2000-10-06=2000-280=2000-W40-5"+ ,"51824=2000-10-07=2000-281=2000-W40-6"+ ,"51825=2000-10-08=2000-282=2000-W40-7"+ ,"51826=2000-10-09=2000-283=2000-W41-1"+ ,"51827=2000-10-10=2000-284=2000-W41-2"+ ,"51828=2000-10-11=2000-285=2000-W41-3"+ ,"51829=2000-10-12=2000-286=2000-W41-4"+ ,"51830=2000-10-13=2000-287=2000-W41-5"+ ,"51831=2000-10-14=2000-288=2000-W41-6"+ ,"51832=2000-10-15=2000-289=2000-W41-7"+ ,"51833=2000-10-16=2000-290=2000-W42-1"+ ,"51834=2000-10-17=2000-291=2000-W42-2"+ ,"51835=2000-10-18=2000-292=2000-W42-3"+ ,"51836=2000-10-19=2000-293=2000-W42-4"+ ,"51837=2000-10-20=2000-294=2000-W42-5"+ ,"51838=2000-10-21=2000-295=2000-W42-6"+ ,"51839=2000-10-22=2000-296=2000-W42-7"+ ,"51840=2000-10-23=2000-297=2000-W43-1"+ ,"51841=2000-10-24=2000-298=2000-W43-2"+ ,"51842=2000-10-25=2000-299=2000-W43-3"+ ,"51843=2000-10-26=2000-300=2000-W43-4"+ ,"51844=2000-10-27=2000-301=2000-W43-5"+ ,"51845=2000-10-28=2000-302=2000-W43-6"+ ,"51846=2000-10-29=2000-303=2000-W43-7"+ ,"51847=2000-10-30=2000-304=2000-W44-1"+ ,"51848=2000-10-31=2000-305=2000-W44-2"+ ,"51849=2000-11-01=2000-306=2000-W44-3"+ ,"51850=2000-11-02=2000-307=2000-W44-4"+ ,"51851=2000-11-03=2000-308=2000-W44-5"+ ,"51852=2000-11-04=2000-309=2000-W44-6"+ ,"51853=2000-11-05=2000-310=2000-W44-7"+ ,"51854=2000-11-06=2000-311=2000-W45-1"+ ,"51855=2000-11-07=2000-312=2000-W45-2"+ ,"51856=2000-11-08=2000-313=2000-W45-3"+ ,"51857=2000-11-09=2000-314=2000-W45-4"+ ,"51858=2000-11-10=2000-315=2000-W45-5"+ ,"51859=2000-11-11=2000-316=2000-W45-6"+ ,"51860=2000-11-12=2000-317=2000-W45-7"+ ,"51861=2000-11-13=2000-318=2000-W46-1"+ ,"51862=2000-11-14=2000-319=2000-W46-2"+ ,"51863=2000-11-15=2000-320=2000-W46-3"+ ,"51864=2000-11-16=2000-321=2000-W46-4"+ ,"51865=2000-11-17=2000-322=2000-W46-5"+ ,"51866=2000-11-18=2000-323=2000-W46-6"+ ,"51867=2000-11-19=2000-324=2000-W46-7"+ ,"51868=2000-11-20=2000-325=2000-W47-1"+ ,"51869=2000-11-21=2000-326=2000-W47-2"+ ,"51870=2000-11-22=2000-327=2000-W47-3"+ ,"51871=2000-11-23=2000-328=2000-W47-4"+ ,"51872=2000-11-24=2000-329=2000-W47-5"+ ,"51873=2000-11-25=2000-330=2000-W47-6"+ ,"51874=2000-11-26=2000-331=2000-W47-7"+ ,"51875=2000-11-27=2000-332=2000-W48-1"+ ,"51876=2000-11-28=2000-333=2000-W48-2"+ ,"51877=2000-11-29=2000-334=2000-W48-3"+ ,"51878=2000-11-30=2000-335=2000-W48-4"+ ,"51879=2000-12-01=2000-336=2000-W48-5"+ ,"51880=2000-12-02=2000-337=2000-W48-6"+ ,"51881=2000-12-03=2000-338=2000-W48-7"+ ,"51882=2000-12-04=2000-339=2000-W49-1"+ ,"51883=2000-12-05=2000-340=2000-W49-2"+ ,"51884=2000-12-06=2000-341=2000-W49-3"+ ,"51885=2000-12-07=2000-342=2000-W49-4"+ ,"51886=2000-12-08=2000-343=2000-W49-5"+ ,"51887=2000-12-09=2000-344=2000-W49-6"+ ,"51888=2000-12-10=2000-345=2000-W49-7"+ ,"51889=2000-12-11=2000-346=2000-W50-1"+ ,"51890=2000-12-12=2000-347=2000-W50-2"+ ,"51891=2000-12-13=2000-348=2000-W50-3"+ ,"51892=2000-12-14=2000-349=2000-W50-4"+ ,"51893=2000-12-15=2000-350=2000-W50-5"+ ,"51894=2000-12-16=2000-351=2000-W50-6"+ ,"51895=2000-12-17=2000-352=2000-W50-7"+ ,"51896=2000-12-18=2000-353=2000-W51-1"+ ,"51897=2000-12-19=2000-354=2000-W51-2"+ ,"51898=2000-12-20=2000-355=2000-W51-3"+ ,"51899=2000-12-21=2000-356=2000-W51-4"+ ,"51900=2000-12-22=2000-357=2000-W51-5"+ ,"51901=2000-12-23=2000-358=2000-W51-6"+ ,"51902=2000-12-24=2000-359=2000-W51-7"+ ,"51903=2000-12-25=2000-360=2000-W52-1"+ ,"51904=2000-12-26=2000-361=2000-W52-2"+ ,"51905=2000-12-27=2000-362=2000-W52-3"+ ,"51906=2000-12-28=2000-363=2000-W52-4"+ ,"51907=2000-12-29=2000-364=2000-W52-5"+ ,"51908=2000-12-30=2000-365=2000-W52-6"+ ,"51909=2000-12-31=2000-366=2000-W52-7"+ ,"51910=2001-01-01=2001-001=2001-W01-1"+ ,"51911=2001-01-02=2001-002=2001-W01-2"+ ,"51912=2001-01-03=2001-003=2001-W01-3"+ ,"51913=2001-01-04=2001-004=2001-W01-4"+ ,"51914=2001-01-05=2001-005=2001-W01-5"+ ,"51915=2001-01-06=2001-006=2001-W01-6"+ ,"51916=2001-01-07=2001-007=2001-W01-7"+ ,"51917=2001-01-08=2001-008=2001-W02-1"+ ,"51918=2001-01-09=2001-009=2001-W02-2"+ ,"51919=2001-01-10=2001-010=2001-W02-3"+ ,"51920=2001-01-11=2001-011=2001-W02-4"+ ,"51921=2001-01-12=2001-012=2001-W02-5"+ ,"51922=2001-01-13=2001-013=2001-W02-6"+ ,"51923=2001-01-14=2001-014=2001-W02-7"+ ,"51924=2001-01-15=2001-015=2001-W03-1"+ ,"51925=2001-01-16=2001-016=2001-W03-2"+ ,"51926=2001-01-17=2001-017=2001-W03-3"+ ,"51927=2001-01-18=2001-018=2001-W03-4"+ ,"51928=2001-01-19=2001-019=2001-W03-5"+ ,"51929=2001-01-20=2001-020=2001-W03-6"+ ,"51930=2001-01-21=2001-021=2001-W03-7"+ ,"51931=2001-01-22=2001-022=2001-W04-1"+ ,"51932=2001-01-23=2001-023=2001-W04-2"+ ,"51933=2001-01-24=2001-024=2001-W04-3"+ ,"51934=2001-01-25=2001-025=2001-W04-4"+ ,"51935=2001-01-26=2001-026=2001-W04-5"+ ,"51936=2001-01-27=2001-027=2001-W04-6"+ ,"51937=2001-01-28=2001-028=2001-W04-7"+ ,"51938=2001-01-29=2001-029=2001-W05-1"+ ,"51939=2001-01-30=2001-030=2001-W05-2"+ ,"51940=2001-01-31=2001-031=2001-W05-3"+ ,"51941=2001-02-01=2001-032=2001-W05-4"+ ,"51942=2001-02-02=2001-033=2001-W05-5"+ ,"51943=2001-02-03=2001-034=2001-W05-6"+ ,"51944=2001-02-04=2001-035=2001-W05-7"+ ,"51945=2001-02-05=2001-036=2001-W06-1"+ ,"51946=2001-02-06=2001-037=2001-W06-2"+ ,"51947=2001-02-07=2001-038=2001-W06-3"+ ,"51948=2001-02-08=2001-039=2001-W06-4"+ ,"51949=2001-02-09=2001-040=2001-W06-5"+ ,"51950=2001-02-10=2001-041=2001-W06-6"+ ,"51951=2001-02-11=2001-042=2001-W06-7"+ ,"51952=2001-02-12=2001-043=2001-W07-1"+ ,"51953=2001-02-13=2001-044=2001-W07-2"+ ,"51954=2001-02-14=2001-045=2001-W07-3"+ ,"51955=2001-02-15=2001-046=2001-W07-4"+ ,"51956=2001-02-16=2001-047=2001-W07-5"+ ,"51957=2001-02-17=2001-048=2001-W07-6"+ ,"51958=2001-02-18=2001-049=2001-W07-7"+ ,"51959=2001-02-19=2001-050=2001-W08-1"+ ,"51960=2001-02-20=2001-051=2001-W08-2"+ ,"51961=2001-02-21=2001-052=2001-W08-3"+ ,"51962=2001-02-22=2001-053=2001-W08-4"+ ,"51963=2001-02-23=2001-054=2001-W08-5"+ ,"51964=2001-02-24=2001-055=2001-W08-6"+ ,"51965=2001-02-25=2001-056=2001-W08-7"+ ,"51966=2001-02-26=2001-057=2001-W09-1"+ ,"51967=2001-02-27=2001-058=2001-W09-2"+ ,"51968=2001-02-28=2001-059=2001-W09-3"+ ,"51969=2001-03-01=2001-060=2001-W09-4"+ ,"51970=2001-03-02=2001-061=2001-W09-5"+ ,"51971=2001-03-03=2001-062=2001-W09-6"+ ,"51972=2001-03-04=2001-063=2001-W09-7"+ ,"51973=2001-03-05=2001-064=2001-W10-1"+ ,"51974=2001-03-06=2001-065=2001-W10-2"+ ,"51975=2001-03-07=2001-066=2001-W10-3"+ ,"51976=2001-03-08=2001-067=2001-W10-4"+ ,"51977=2001-03-09=2001-068=2001-W10-5"+ ,"51978=2001-03-10=2001-069=2001-W10-6"+ ,"51979=2001-03-11=2001-070=2001-W10-7"+ ,"51980=2001-03-12=2001-071=2001-W11-1"+ ,"51981=2001-03-13=2001-072=2001-W11-2"+ ,"51982=2001-03-14=2001-073=2001-W11-3"+ ,"51983=2001-03-15=2001-074=2001-W11-4"+ ,"51984=2001-03-16=2001-075=2001-W11-5"+ ,"51985=2001-03-17=2001-076=2001-W11-6"+ ,"51986=2001-03-18=2001-077=2001-W11-7"+ ,"51987=2001-03-19=2001-078=2001-W12-1"+ ,"51988=2001-03-20=2001-079=2001-W12-2"+ ,"51989=2001-03-21=2001-080=2001-W12-3"+ ,"51990=2001-03-22=2001-081=2001-W12-4"+ ,"51991=2001-03-23=2001-082=2001-W12-5"+ ,"51992=2001-03-24=2001-083=2001-W12-6"+ ,"51993=2001-03-25=2001-084=2001-W12-7"+ ,"51994=2001-03-26=2001-085=2001-W13-1"+ ,"51995=2001-03-27=2001-086=2001-W13-2"+ ,"51996=2001-03-28=2001-087=2001-W13-3"+ ,"51997=2001-03-29=2001-088=2001-W13-4"+ ,"51998=2001-03-30=2001-089=2001-W13-5"+ ,"51999=2001-03-31=2001-090=2001-W13-6"+ ,"52000=2001-04-01=2001-091=2001-W13-7"+ ,"52001=2001-04-02=2001-092=2001-W14-1"+ ,"52002=2001-04-03=2001-093=2001-W14-2"+ ,"52003=2001-04-04=2001-094=2001-W14-3"+ ,"52004=2001-04-05=2001-095=2001-W14-4"+ ,"52005=2001-04-06=2001-096=2001-W14-5"+ ,"52006=2001-04-07=2001-097=2001-W14-6"+ ,"52007=2001-04-08=2001-098=2001-W14-7"+ ,"52008=2001-04-09=2001-099=2001-W15-1"+ ,"52009=2001-04-10=2001-100=2001-W15-2"+ ,"52010=2001-04-11=2001-101=2001-W15-3"+ ,"52011=2001-04-12=2001-102=2001-W15-4"+ ,"52012=2001-04-13=2001-103=2001-W15-5"+ ,"52013=2001-04-14=2001-104=2001-W15-6"+ ,"52014=2001-04-15=2001-105=2001-W15-7"+ ,"52015=2001-04-16=2001-106=2001-W16-1"+ ,"52016=2001-04-17=2001-107=2001-W16-2"+ ,"52017=2001-04-18=2001-108=2001-W16-3"+ ,"52018=2001-04-19=2001-109=2001-W16-4"+ ,"52019=2001-04-20=2001-110=2001-W16-5"+ ,"52020=2001-04-21=2001-111=2001-W16-6"+ ,"52021=2001-04-22=2001-112=2001-W16-7"+ ,"52022=2001-04-23=2001-113=2001-W17-1"+ ,"52023=2001-04-24=2001-114=2001-W17-2"+ ,"52024=2001-04-25=2001-115=2001-W17-3"+ ,"52025=2001-04-26=2001-116=2001-W17-4"+ ,"52026=2001-04-27=2001-117=2001-W17-5"+ ,"52027=2001-04-28=2001-118=2001-W17-6"+ ,"52028=2001-04-29=2001-119=2001-W17-7"+ ,"52029=2001-04-30=2001-120=2001-W18-1"+ ,"52030=2001-05-01=2001-121=2001-W18-2"+ ,"52031=2001-05-02=2001-122=2001-W18-3"+ ,"52032=2001-05-03=2001-123=2001-W18-4"+ ,"52033=2001-05-04=2001-124=2001-W18-5"+ ,"52034=2001-05-05=2001-125=2001-W18-6"+ ,"52035=2001-05-06=2001-126=2001-W18-7"+ ,"52036=2001-05-07=2001-127=2001-W19-1"+ ,"52037=2001-05-08=2001-128=2001-W19-2"+ ,"52038=2001-05-09=2001-129=2001-W19-3"+ ,"52039=2001-05-10=2001-130=2001-W19-4"+ ,"52040=2001-05-11=2001-131=2001-W19-5"+ ,"52041=2001-05-12=2001-132=2001-W19-6"+ ,"52042=2001-05-13=2001-133=2001-W19-7"+ ,"52043=2001-05-14=2001-134=2001-W20-1"+ ,"52044=2001-05-15=2001-135=2001-W20-2"+ ,"52045=2001-05-16=2001-136=2001-W20-3"+ ,"52046=2001-05-17=2001-137=2001-W20-4"+ ,"52047=2001-05-18=2001-138=2001-W20-5"+ ,"52048=2001-05-19=2001-139=2001-W20-6"+ ,"52049=2001-05-20=2001-140=2001-W20-7"+ ,"52050=2001-05-21=2001-141=2001-W21-1"+ ,"52051=2001-05-22=2001-142=2001-W21-2"+ ,"52052=2001-05-23=2001-143=2001-W21-3"+ ,"52053=2001-05-24=2001-144=2001-W21-4"+ ,"52054=2001-05-25=2001-145=2001-W21-5"+ ,"52055=2001-05-26=2001-146=2001-W21-6"+ ,"52056=2001-05-27=2001-147=2001-W21-7"+ ,"52057=2001-05-28=2001-148=2001-W22-1"+ ,"52058=2001-05-29=2001-149=2001-W22-2"+ ,"52059=2001-05-30=2001-150=2001-W22-3"+ ,"52060=2001-05-31=2001-151=2001-W22-4"+ ,"52061=2001-06-01=2001-152=2001-W22-5"+ ,"52062=2001-06-02=2001-153=2001-W22-6"+ ,"52063=2001-06-03=2001-154=2001-W22-7"+ ,"52064=2001-06-04=2001-155=2001-W23-1"+ ,"52065=2001-06-05=2001-156=2001-W23-2"+ ,"52066=2001-06-06=2001-157=2001-W23-3"+ ,"52067=2001-06-07=2001-158=2001-W23-4"+ ,"52068=2001-06-08=2001-159=2001-W23-5"+ ,"52069=2001-06-09=2001-160=2001-W23-6"+ ,"52070=2001-06-10=2001-161=2001-W23-7"+ ,"52071=2001-06-11=2001-162=2001-W24-1"+ ,"52072=2001-06-12=2001-163=2001-W24-2"+ ,"52073=2001-06-13=2001-164=2001-W24-3"+ ,"52074=2001-06-14=2001-165=2001-W24-4"+ ,"52075=2001-06-15=2001-166=2001-W24-5"+ ,"52076=2001-06-16=2001-167=2001-W24-6"+ ,"52077=2001-06-17=2001-168=2001-W24-7"+ ,"52078=2001-06-18=2001-169=2001-W25-1"+ ,"52079=2001-06-19=2001-170=2001-W25-2"+ ,"52080=2001-06-20=2001-171=2001-W25-3"+ ,"52081=2001-06-21=2001-172=2001-W25-4"+ ,"52082=2001-06-22=2001-173=2001-W25-5"+ ,"52083=2001-06-23=2001-174=2001-W25-6"+ ,"52084=2001-06-24=2001-175=2001-W25-7"+ ,"52085=2001-06-25=2001-176=2001-W26-1"+ ,"52086=2001-06-26=2001-177=2001-W26-2"+ ,"52087=2001-06-27=2001-178=2001-W26-3"+ ,"52088=2001-06-28=2001-179=2001-W26-4"+ ,"52089=2001-06-29=2001-180=2001-W26-5"+ ,"52090=2001-06-30=2001-181=2001-W26-6"+ ,"52091=2001-07-01=2001-182=2001-W26-7"+ ,"52092=2001-07-02=2001-183=2001-W27-1"+ ,"52093=2001-07-03=2001-184=2001-W27-2"+ ,"52094=2001-07-04=2001-185=2001-W27-3"+ ,"52095=2001-07-05=2001-186=2001-W27-4"+ ,"52096=2001-07-06=2001-187=2001-W27-5"+ ,"52097=2001-07-07=2001-188=2001-W27-6"+ ,"52098=2001-07-08=2001-189=2001-W27-7"+ ,"52099=2001-07-09=2001-190=2001-W28-1"+ ,"52100=2001-07-10=2001-191=2001-W28-2"+ ,"52101=2001-07-11=2001-192=2001-W28-3"+ ,"52102=2001-07-12=2001-193=2001-W28-4"+ ,"52103=2001-07-13=2001-194=2001-W28-5"+ ,"52104=2001-07-14=2001-195=2001-W28-6"+ ,"52105=2001-07-15=2001-196=2001-W28-7"+ ,"52106=2001-07-16=2001-197=2001-W29-1"+ ,"52107=2001-07-17=2001-198=2001-W29-2"+ ,"52108=2001-07-18=2001-199=2001-W29-3"+ ,"52109=2001-07-19=2001-200=2001-W29-4"+ ,"52110=2001-07-20=2001-201=2001-W29-5"+ ,"52111=2001-07-21=2001-202=2001-W29-6"+ ,"52112=2001-07-22=2001-203=2001-W29-7"+ ,"52113=2001-07-23=2001-204=2001-W30-1"+ ,"52114=2001-07-24=2001-205=2001-W30-2"+ ,"52115=2001-07-25=2001-206=2001-W30-3"+ ,"52116=2001-07-26=2001-207=2001-W30-4"+ ,"52117=2001-07-27=2001-208=2001-W30-5"+ ,"52118=2001-07-28=2001-209=2001-W30-6"+ ,"52119=2001-07-29=2001-210=2001-W30-7"+ ,"52120=2001-07-30=2001-211=2001-W31-1"+ ,"52121=2001-07-31=2001-212=2001-W31-2"+ ,"52122=2001-08-01=2001-213=2001-W31-3"+ ,"52123=2001-08-02=2001-214=2001-W31-4"+ ,"52124=2001-08-03=2001-215=2001-W31-5"+ ,"52125=2001-08-04=2001-216=2001-W31-6"+ ,"52126=2001-08-05=2001-217=2001-W31-7"+ ,"52127=2001-08-06=2001-218=2001-W32-1"+ ,"52128=2001-08-07=2001-219=2001-W32-2"+ ,"52129=2001-08-08=2001-220=2001-W32-3"+ ,"52130=2001-08-09=2001-221=2001-W32-4"+ ,"52131=2001-08-10=2001-222=2001-W32-5"+ ,"52132=2001-08-11=2001-223=2001-W32-6"+ ,"52133=2001-08-12=2001-224=2001-W32-7"+ ,"52134=2001-08-13=2001-225=2001-W33-1"+ ,"52135=2001-08-14=2001-226=2001-W33-2"+ ,"52136=2001-08-15=2001-227=2001-W33-3"+ ,"52137=2001-08-16=2001-228=2001-W33-4"+ ,"52138=2001-08-17=2001-229=2001-W33-5"+ ,"52139=2001-08-18=2001-230=2001-W33-6"+ ,"52140=2001-08-19=2001-231=2001-W33-7"+ ,"52141=2001-08-20=2001-232=2001-W34-1"+ ,"52142=2001-08-21=2001-233=2001-W34-2"+ ,"52143=2001-08-22=2001-234=2001-W34-3"+ ,"52144=2001-08-23=2001-235=2001-W34-4"+ ,"52145=2001-08-24=2001-236=2001-W34-5"+ ,"52146=2001-08-25=2001-237=2001-W34-6"+ ,"52147=2001-08-26=2001-238=2001-W34-7"+ ,"52148=2001-08-27=2001-239=2001-W35-1"+ ,"52149=2001-08-28=2001-240=2001-W35-2"+ ,"52150=2001-08-29=2001-241=2001-W35-3"+ ,"52151=2001-08-30=2001-242=2001-W35-4"+ ,"52152=2001-08-31=2001-243=2001-W35-5"+ ,"52153=2001-09-01=2001-244=2001-W35-6"+ ,"52154=2001-09-02=2001-245=2001-W35-7"+ ,"52155=2001-09-03=2001-246=2001-W36-1"+ ,"52156=2001-09-04=2001-247=2001-W36-2"+ ,"52157=2001-09-05=2001-248=2001-W36-3"+ ,"52158=2001-09-06=2001-249=2001-W36-4"+ ,"52159=2001-09-07=2001-250=2001-W36-5"+ ,"52160=2001-09-08=2001-251=2001-W36-6"+ ,"52161=2001-09-09=2001-252=2001-W36-7"+ ,"52162=2001-09-10=2001-253=2001-W37-1"+ ,"52163=2001-09-11=2001-254=2001-W37-2"+ ,"52164=2001-09-12=2001-255=2001-W37-3"+ ,"52165=2001-09-13=2001-256=2001-W37-4"+ ,"52166=2001-09-14=2001-257=2001-W37-5"+ ,"52167=2001-09-15=2001-258=2001-W37-6"+ ,"52168=2001-09-16=2001-259=2001-W37-7"+ ,"52169=2001-09-17=2001-260=2001-W38-1"+ ,"52170=2001-09-18=2001-261=2001-W38-2"+ ,"52171=2001-09-19=2001-262=2001-W38-3"+ ,"52172=2001-09-20=2001-263=2001-W38-4"+ ,"52173=2001-09-21=2001-264=2001-W38-5"+ ,"52174=2001-09-22=2001-265=2001-W38-6"+ ,"52175=2001-09-23=2001-266=2001-W38-7"+ ,"52176=2001-09-24=2001-267=2001-W39-1"+ ,"52177=2001-09-25=2001-268=2001-W39-2"+ ,"52178=2001-09-26=2001-269=2001-W39-3"+ ,"52179=2001-09-27=2001-270=2001-W39-4"+ ,"52180=2001-09-28=2001-271=2001-W39-5"+ ,"52181=2001-09-29=2001-272=2001-W39-6"+ ,"52182=2001-09-30=2001-273=2001-W39-7"+ ,"52183=2001-10-01=2001-274=2001-W40-1"+ ,"52184=2001-10-02=2001-275=2001-W40-2"+ ,"52185=2001-10-03=2001-276=2001-W40-3"+ ,"52186=2001-10-04=2001-277=2001-W40-4"+ ,"52187=2001-10-05=2001-278=2001-W40-5"+ ,"52188=2001-10-06=2001-279=2001-W40-6"+ ,"52189=2001-10-07=2001-280=2001-W40-7"+ ,"52190=2001-10-08=2001-281=2001-W41-1"+ ,"52191=2001-10-09=2001-282=2001-W41-2"+ ,"52192=2001-10-10=2001-283=2001-W41-3"+ ,"52193=2001-10-11=2001-284=2001-W41-4"+ ,"52194=2001-10-12=2001-285=2001-W41-5"+ ,"52195=2001-10-13=2001-286=2001-W41-6"+ ,"52196=2001-10-14=2001-287=2001-W41-7"+ ,"52197=2001-10-15=2001-288=2001-W42-1"+ ,"52198=2001-10-16=2001-289=2001-W42-2"+ ,"52199=2001-10-17=2001-290=2001-W42-3"+ ,"52200=2001-10-18=2001-291=2001-W42-4"+ ,"52201=2001-10-19=2001-292=2001-W42-5"+ ,"52202=2001-10-20=2001-293=2001-W42-6"+ ,"52203=2001-10-21=2001-294=2001-W42-7"+ ,"52204=2001-10-22=2001-295=2001-W43-1"+ ,"52205=2001-10-23=2001-296=2001-W43-2"+ ,"52206=2001-10-24=2001-297=2001-W43-3"+ ,"52207=2001-10-25=2001-298=2001-W43-4"+ ,"52208=2001-10-26=2001-299=2001-W43-5"+ ,"52209=2001-10-27=2001-300=2001-W43-6"+ ,"52210=2001-10-28=2001-301=2001-W43-7"+ ,"52211=2001-10-29=2001-302=2001-W44-1"+ ,"52212=2001-10-30=2001-303=2001-W44-2"+ ,"52213=2001-10-31=2001-304=2001-W44-3"+ ,"52214=2001-11-01=2001-305=2001-W44-4"+ ,"52215=2001-11-02=2001-306=2001-W44-5"+ ,"52216=2001-11-03=2001-307=2001-W44-6"+ ,"52217=2001-11-04=2001-308=2001-W44-7"+ ,"52218=2001-11-05=2001-309=2001-W45-1"+ ,"52219=2001-11-06=2001-310=2001-W45-2"+ ,"52220=2001-11-07=2001-311=2001-W45-3"+ ,"52221=2001-11-08=2001-312=2001-W45-4"+ ,"52222=2001-11-09=2001-313=2001-W45-5"+ ,"52223=2001-11-10=2001-314=2001-W45-6"+ ,"52224=2001-11-11=2001-315=2001-W45-7"+ ,"52225=2001-11-12=2001-316=2001-W46-1"+ ,"52226=2001-11-13=2001-317=2001-W46-2"+ ,"52227=2001-11-14=2001-318=2001-W46-3"+ ,"52228=2001-11-15=2001-319=2001-W46-4"+ ,"52229=2001-11-16=2001-320=2001-W46-5"+ ,"52230=2001-11-17=2001-321=2001-W46-6"+ ,"52231=2001-11-18=2001-322=2001-W46-7"+ ,"52232=2001-11-19=2001-323=2001-W47-1"+ ,"52233=2001-11-20=2001-324=2001-W47-2"+ ,"52234=2001-11-21=2001-325=2001-W47-3"+ ,"52235=2001-11-22=2001-326=2001-W47-4"+ ,"52236=2001-11-23=2001-327=2001-W47-5"+ ,"52237=2001-11-24=2001-328=2001-W47-6"+ ,"52238=2001-11-25=2001-329=2001-W47-7"+ ,"52239=2001-11-26=2001-330=2001-W48-1"+ ,"52240=2001-11-27=2001-331=2001-W48-2"+ ,"52241=2001-11-28=2001-332=2001-W48-3"+ ,"52242=2001-11-29=2001-333=2001-W48-4"+ ,"52243=2001-11-30=2001-334=2001-W48-5"+ ,"52244=2001-12-01=2001-335=2001-W48-6"+ ,"52245=2001-12-02=2001-336=2001-W48-7"+ ,"52246=2001-12-03=2001-337=2001-W49-1"+ ,"52247=2001-12-04=2001-338=2001-W49-2"+ ,"52248=2001-12-05=2001-339=2001-W49-3"+ ,"52249=2001-12-06=2001-340=2001-W49-4"+ ,"52250=2001-12-07=2001-341=2001-W49-5"+ ,"52251=2001-12-08=2001-342=2001-W49-6"+ ,"52252=2001-12-09=2001-343=2001-W49-7"+ ,"52253=2001-12-10=2001-344=2001-W50-1"+ ,"52254=2001-12-11=2001-345=2001-W50-2"+ ,"52255=2001-12-12=2001-346=2001-W50-3"+ ,"52256=2001-12-13=2001-347=2001-W50-4"+ ,"52257=2001-12-14=2001-348=2001-W50-5"+ ,"52258=2001-12-15=2001-349=2001-W50-6"+ ,"52259=2001-12-16=2001-350=2001-W50-7"+ ,"52260=2001-12-17=2001-351=2001-W51-1"+ ,"52261=2001-12-18=2001-352=2001-W51-2"+ ,"52262=2001-12-19=2001-353=2001-W51-3"+ ,"52263=2001-12-20=2001-354=2001-W51-4"+ ,"52264=2001-12-21=2001-355=2001-W51-5"+ ,"52265=2001-12-22=2001-356=2001-W51-6"+ ,"52266=2001-12-23=2001-357=2001-W51-7"+ ,"52267=2001-12-24=2001-358=2001-W52-1"+ ,"52268=2001-12-25=2001-359=2001-W52-2"+ ,"52269=2001-12-26=2001-360=2001-W52-3"+ ,"52270=2001-12-27=2001-361=2001-W52-4"+ ,"52271=2001-12-28=2001-362=2001-W52-5"+ ,"52272=2001-12-29=2001-363=2001-W52-6"+ ,"52273=2001-12-30=2001-364=2001-W52-7"+ ,"52274=2001-12-31=2001-365=2002-W01-1"+ ,"52275=2002-01-01=2002-001=2002-W01-2"+ ,"52276=2002-01-02=2002-002=2002-W01-3"+ ,"52277=2002-01-03=2002-003=2002-W01-4"+ ,"52278=2002-01-04=2002-004=2002-W01-5"+ ,"52279=2002-01-05=2002-005=2002-W01-6"+ ,"52280=2002-01-06=2002-006=2002-W01-7"+ ,""+ ,"51178=1998-12-31=1998-365=1998-W53-4"+ ,""+ ,"1998-12-31 23:59:60.5"+ ,"51178,86400.5s"+ ,"1998-12-31 15:59:60.5"+ ,"51178,86400.5s"+ ,""+ ,"2000-03-01 00:00:00"+ ,"2000-03-01 12:00:00"+ ,"2000-02-29 16:00:00"+ ,"2000-03-01 04:00:00"+ ,"2000-03-01 08:00:00"+ ,"2000-03-01 20:00:00"+ ,""+ ,"12:34:56.789"+ ,"12:34:56.789123"+ ,"12:34:56.789123456"+ ,"12:34:56.789123456789"+ ,"" ]
+ Test/TestUtil.hs view
@@ -0,0 +1,38 @@+{-# OPTIONS -fno-warn-overlapping-patterns #-}+module Test.TestUtil+ (+ module Test.TestUtil,+ module Test.Framework,+ module Test.Framework.Providers.QuickCheck2+ ) where++import Test.Framework+import Test.Framework.Providers.API+import Test.Framework.Providers.QuickCheck2++data Result = Pass | Fail String++instance Show Result where+ show Pass = "passed"+ show (Fail s) = "failed: " ++ s++instance TestResultlike () Result where+ testSucceeded Pass = True+ testSucceeded (Fail _) = False++instance Testlike () Result (IO Result) where+ testTypeName _ = "Cases"+ runTest _ ior = do+ r <- ior+ return (Finished r,return ())++ioTest :: String -> IO Result -> Test+ioTest = Test++pureTest :: String -> Result -> Test+pureTest name result = ioTest name (return result)++diff :: (Show a,Eq a) => a -> a -> Result+diff expected found | expected == found = Pass+diff expected found = Fail ("expected " ++ (show expected) ++ " but found " ++ (show found))+
+ Test/Tests.hs view
@@ -0,0 +1,28 @@+module Test.Tests where++import Test.Framework++import Test.AddDays+import Test.ClipDates+import Test.ConvertBack+import Test.LongWeekYears+import Test.TestCalendars+import Test.TestEaster+import Test.TestFormat+import Test.TestMonthDay+import Test.TestParseDAT+import Test.TestParseTime+import Test.TestTime++tests :: [Test]+tests = [ addDaysTest+ , clipDates+ , convertBack+ , longWeekYears+ , testCalendars+ , testEaster+ , testFormat+ , testMonthDay+ , testParseDAT+ , testParseTime+ , testTime ]
+ Test/TimeZone.hs view
@@ -0,0 +1,10 @@+{-# OPTIONS -Wall -Werror #-}++module Main where++import Data.Time++main :: IO ()+main = do+ zone <- getCurrentTimeZone+ putStrLn (timeZoneOffsetString zone)
+ Test/UseCases.lhs view
@@ -0,0 +1,83 @@+> module UseCases where+> import Data.Time.Calendar.OrdinalDate+> import Data.Time+> import System.Locale+++From Brian Smith:+<http://www.haskell.org/pipermail/libraries/2005-July/004060.html>++Use cases (primarily taken from real-world corporate IT applications I have +developed) :++* What is the equivalent (or closest aproximation) of the SQL DateTime type +(date and time without any timezone information)? What is the equivalent of +the SQL Date type (date without any timezone information)?++> type SQLDateTime = LocalTime+> type SQLDate = Day++* The user enters a date as "7/4/2005." How do I determine if this date is +before or after July 1st of this year?++TODO: Parsing++* How do I present the date "July 1st of this year" to the user in M/D/YYYY +format?++> july1st = do+> now <- getZonedTime+> let (thisYear,_,_) = toGregorian (localDay (zonedTimeToLocalTime now))+> let day = fromGregorian thisYear 7 1+> return (formatTime defaultTimeLocale "%m/%d/%Y" day)++This actually gives "07/01/2005" rather than "7/1/2005".+ISSUE: Should I make additional %-codes for this?+++* How do I truncate a datetime to midnight of the same day? How do I +truncate a date to the first of the month? How do I truncate a date to the +first day of the year it occurred in?++> truncateToMidnight (LocalTime day _) = (LocalTime day midnight)++> truncateToFirstOfMonth day = fromGregorian y m 1 where+> (y,m,_) = toGregorian day++> truncateToJan1st day = fromOrdinalDate y 1 where+> (y,_) = toOrdinalDate day++* Given a date X, how do I find the last day of the month that X occurs in. +For example, If X is July 4th, 2005, then I want the result to be July 31st, +2005. If X is Februrary 5, then I want the result to be Februrary 28 for +non-leap-years and February 29 for leap years.++> lastDayOfMonth day = fromGregorian y m (gregorianMonthLength y m) where+> (y,m,_) = toGregorian day++* The user enters a time T with no date, e.g. "17:30". How do I merge this +time onto a date D (e.g. July 4, 2005), so that the result has is a datetime +with date D and the time T (July 4, 2005 at 17:30).++> mergeDateAndTime = LocalTime++* Given two datetimes T1, T2, how do I determine if they are on the same +date?++> sameDay (LocalTime d1 _) (LocalTime d2 _) = d1 == d2+++From Simon Marlow:+<http://www.haskell.org/pipermail/libraries/2005-July/004066.html>++I just had a little look around, mainly at System.Time.Calendar. I+think the structure is rather complicated - I wanted to find out how to+get a CalendarTime for "this time tomorrow", and ended up with this:++*System.Time.Calendar> let c' =+c{ztTime=zttime{dtDay=dtday{gregDay=day+1}}} where { zttime = ztTime c;+dtday = dtDay zttime; day = gregDay dtday }++> thisTimeTomorrow (ZonedTime (LocalTime day tod) zone) = (ZonedTime (LocalTime (addDays 1 day) tod) zone)++
configure view
@@ -1,6 +1,6 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles.-# Generated by GNU Autoconf 2.67 for Haskell time package 1.3.+# Generated by GNU Autoconf 2.68 for Haskell time package 1.4.0.2. # # Report bugs to <ashley@semantic.org>. #@@ -91,6 +91,7 @@ IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator.+as_myself= case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR@@ -216,11 +217,18 @@ # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables.+ # Preserve -v and -x to the replacement shell. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV export CONFIG_SHELL- exec "$CONFIG_SHELL" "$as_myself" ${1+"$@"}+ case $- in # ((((+ *v*x* | *x*v* ) as_opts=-vx ;;+ *v* ) as_opts=-v ;;+ *x* ) as_opts=-x ;;+ * ) as_opts= ;;+ esac+ exec "$CONFIG_SHELL" $as_opts "$as_myself" ${1+"$@"} fi if test x$as_have_required = xno; then :@@ -552,8 +560,8 @@ # Identity of this package. PACKAGE_NAME='Haskell time package' PACKAGE_TARNAME='time'-PACKAGE_VERSION='1.3'-PACKAGE_STRING='Haskell time package 1.3'+PACKAGE_VERSION='1.4.0.2'+PACKAGE_STRING='Haskell time package 1.4.0.2' PACKAGE_BUGREPORT='ashley@semantic.org' PACKAGE_URL='' @@ -648,6 +656,8 @@ ac_user_opts=' enable_option_checking with_cc+with_gcc+with_compiler ' ac_precious_vars='build_alias host_alias@@ -1062,7 +1072,7 @@ $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2 expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2- : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}+ : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}" ;; esac@@ -1200,7 +1210,7 @@ # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF-\`configure' configures Haskell time package 1.3 to adapt to many kinds of systems.+\`configure' configures Haskell time package 1.4.0.2 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1261,7 +1271,7 @@ if test -n "$ac_init_help"; then case $ac_init_help in- short | recursive ) echo "Configuration of Haskell time package 1.3:";;+ short | recursive ) echo "Configuration of Haskell time package 1.4.0.2:";; esac cat <<\_ACEOF @@ -1269,6 +1279,8 @@ --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) C compiler+Gnu C compiler+Haskell compiler Some influential environment variables: CC C compiler command@@ -1346,8 +1358,8 @@ test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF-Haskell time package configure 1.3-generated by GNU Autoconf 2.67+Haskell time package configure 1.4.0.2+generated by GNU Autoconf 2.68 Copyright (C) 2010 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation@@ -1393,7 +1405,7 @@ ac_retval=1 fi- eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}+ eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_compile@@ -1430,7 +1442,7 @@ ac_retval=1 fi- eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}+ eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_cpp@@ -1443,10 +1455,10 @@ ac_fn_c_check_header_mongrel () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack- if eval "test \"\${$3+set}\"" = set; then :+ if eval \${$3+:} false; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; }-if eval "test \"\${$3+set}\"" = set; then :+if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 fi eval ac_res=\$$3@@ -1513,7 +1525,7 @@ esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; }-if eval "test \"\${$3+set}\"" = set; then :+if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else eval "$3=\$ac_header_compiler"@@ -1522,7 +1534,7 @@ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } fi- eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}+ eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_header_mongrel @@ -1563,7 +1575,7 @@ ac_retval=$ac_status fi rm -rf conftest.dSYM conftest_ipa8_conftest.oo- eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}+ eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_run@@ -1577,7 +1589,7 @@ as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; }-if eval "test \"\${$3+set}\"" = set; then :+if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext@@ -1595,7 +1607,7 @@ eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; }- eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}+ eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_header_compile @@ -1640,7 +1652,7 @@ # interfere with the next link command; also delete a directory that is # left behind by Apple's compiler. We do this before executing the actions. rm -rf conftest.dSYM conftest_ipa8_conftest.oo- eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}+ eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_link@@ -1653,7 +1665,7 @@ as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; }-if eval "test \"\${$3+set}\"" = set; then :+if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext@@ -1708,7 +1720,7 @@ eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; }- eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}+ eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_func @@ -1721,7 +1733,7 @@ as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2.$3" >&5 $as_echo_n "checking for $2.$3... " >&6; }-if eval "test \"\${$4+set}\"" = set; then :+if eval \${$4+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext@@ -1765,7 +1777,7 @@ eval ac_res=\$$4 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; }- eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}+ eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_member @@ -1780,7 +1792,7 @@ as_decl_use=`echo $2|sed -e 's/(/((/' -e 's/)/) 0&/' -e 's/,/) 0& (/g'` { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $as_decl_name is declared" >&5 $as_echo_n "checking whether $as_decl_name is declared... " >&6; }-if eval "test \"\${$3+set}\"" = set; then :+if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext@@ -1811,15 +1823,15 @@ eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; }- eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}+ eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_decl cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. -It was created by Haskell time package $as_me 1.3, which was-generated by GNU Autoconf 2.67. Invocation command line was+It was created by Haskell time package $as_me 1.4.0.2, which was+generated by GNU Autoconf 2.68. Invocation command line was $ $0 $@ @@ -2077,7 +2089,7 @@ || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "failed to load site script $ac_site_file-See \`config.log' for more details" "$LINENO" 5 ; }+See \`config.log' for more details" "$LINENO" 5; } fi done @@ -2176,6 +2188,18 @@ withval=$with_cc; CC=$withval fi ++# Check whether --with-gcc was given.+if test "${with_gcc+set}" = set; then :+ withval=$with_gcc;+fi+++# Check whether --with-compiler was given.+if test "${with_compiler+set}" = set; then :+ withval=$with_compiler;+fi+ ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'@@ -2186,7 +2210,7 @@ set dummy ${ac_tool_prefix}gcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; }-if test "${ac_cv_prog_CC+set}" = set; then :+if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then@@ -2226,7 +2250,7 @@ set dummy gcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; }-if test "${ac_cv_prog_ac_ct_CC+set}" = set; then :+if ${ac_cv_prog_ac_ct_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then@@ -2279,7 +2303,7 @@ set dummy ${ac_tool_prefix}cc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; }-if test "${ac_cv_prog_CC+set}" = set; then :+if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then@@ -2319,7 +2343,7 @@ set dummy cc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; }-if test "${ac_cv_prog_CC+set}" = set; then :+if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then@@ -2378,7 +2402,7 @@ set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; }-if test "${ac_cv_prog_CC+set}" = set; then :+if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then@@ -2422,7 +2446,7 @@ set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; }-if test "${ac_cv_prog_ac_ct_CC+set}" = set; then :+if ${ac_cv_prog_ac_ct_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then@@ -2477,7 +2501,7 @@ test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "no acceptable C compiler found in \$PATH-See \`config.log' for more details" "$LINENO" 5 ; }+See \`config.log' for more details" "$LINENO" 5; } # Provide some information about the compiler. $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5@@ -2592,7 +2616,7 @@ { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "C compiler cannot create executables-See \`config.log' for more details" "$LINENO" 5 ; }+See \`config.log' for more details" "$LINENO" 5; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; }@@ -2635,7 +2659,7 @@ { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of executables: cannot compile and link-See \`config.log' for more details" "$LINENO" 5 ; }+See \`config.log' for more details" "$LINENO" 5; } fi rm -f conftest conftest$ac_cv_exeext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5@@ -2694,7 +2718,7 @@ $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot run C compiled programs. If you meant to cross compile, use \`--host'.-See \`config.log' for more details" "$LINENO" 5 ; }+See \`config.log' for more details" "$LINENO" 5; } fi fi fi@@ -2705,7 +2729,7 @@ ac_clean_files=$ac_clean_files_save { $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 $as_echo_n "checking for suffix of object files... " >&6; }-if test "${ac_cv_objext+set}" = set; then :+if ${ac_cv_objext+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext@@ -2746,7 +2770,7 @@ { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of object files: cannot compile-See \`config.log' for more details" "$LINENO" 5 ; }+See \`config.log' for more details" "$LINENO" 5; } fi rm -f conftest.$ac_cv_objext conftest.$ac_ext fi@@ -2756,7 +2780,7 @@ ac_objext=$OBJEXT { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 $as_echo_n "checking whether we are using the GNU C compiler... " >&6; }-if test "${ac_cv_c_compiler_gnu+set}" = set; then :+if ${ac_cv_c_compiler_gnu+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext@@ -2793,7 +2817,7 @@ ac_save_CFLAGS=$CFLAGS { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 $as_echo_n "checking whether $CC accepts -g... " >&6; }-if test "${ac_cv_prog_cc_g+set}" = set; then :+if ${ac_cv_prog_cc_g+:} false; then : $as_echo_n "(cached) " >&6 else ac_save_c_werror_flag=$ac_c_werror_flag@@ -2871,7 +2895,7 @@ fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 $as_echo_n "checking for $CC option to accept ISO C89... " >&6; }-if test "${ac_cv_prog_cc_c89+set}" = set; then :+if ${ac_cv_prog_cc_c89+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_prog_cc_c89=no@@ -2983,7 +3007,7 @@ CPP= fi if test -z "$CPP"; then- if test "${ac_cv_prog_CPP+set}" = set; then :+ if ${ac_cv_prog_CPP+:} false; then : $as_echo_n "(cached) " >&6 else # Double quotes because CPP needs to be expanded@@ -3099,7 +3123,7 @@ { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "C preprocessor \"$CPP\" fails sanity check-See \`config.log' for more details" "$LINENO" 5 ; }+See \`config.log' for more details" "$LINENO" 5; } fi ac_ext=c@@ -3111,7 +3135,7 @@ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 $as_echo_n "checking for grep that handles long lines and -e... " >&6; }-if test "${ac_cv_path_GREP+set}" = set; then :+if ${ac_cv_path_GREP+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$GREP"; then@@ -3174,7 +3198,7 @@ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 $as_echo_n "checking for egrep... " >&6; }-if test "${ac_cv_path_EGREP+set}" = set; then :+if ${ac_cv_path_EGREP+:} false; then : $as_echo_n "(cached) " >&6 else if echo a | $GREP -E '(a|b)' >/dev/null 2>&1@@ -3241,7 +3265,7 @@ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 $as_echo_n "checking for ANSI C header files... " >&6; }-if test "${ac_cv_header_stdc+set}" = set; then :+if ${ac_cv_header_stdc+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext@@ -3371,7 +3395,7 @@ for ac_header in time.h do : ac_fn_c_check_header_mongrel "$LINENO" "time.h" "ac_cv_header_time_h" "$ac_includes_default"-if test "x$ac_cv_header_time_h" = x""yes; then :+if test "x$ac_cv_header_time_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_TIME_H 1 _ACEOF@@ -3395,7 +3419,7 @@ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether struct tm is in sys/time.h or time.h" >&5 $as_echo_n "checking whether struct tm is in sys/time.h or time.h... " >&6; }-if test "${ac_cv_struct_tm+set}" = set; then :+if ${ac_cv_struct_tm+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext@@ -3432,7 +3456,7 @@ #include <$ac_cv_struct_tm> "-if test "x$ac_cv_member_struct_tm_tm_zone" = x""yes; then :+if test "x$ac_cv_member_struct_tm_tm_zone" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_STRUCT_TM_TM_ZONE 1@@ -3448,7 +3472,7 @@ else ac_fn_c_check_decl "$LINENO" "tzname" "ac_cv_have_decl_tzname" "#include <time.h> "-if test "x$ac_cv_have_decl_tzname" = x""yes; then :+if test "x$ac_cv_have_decl_tzname" = xyes; then : ac_have_decl=1 else ac_have_decl=0@@ -3460,7 +3484,7 @@ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for tzname" >&5 $as_echo_n "checking for tzname... " >&6; }-if test "${ac_cv_var_tzname+set}" = set; then :+if ${ac_cv_var_tzname+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext@@ -3498,7 +3522,7 @@ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether time.h and sys/time.h may both be included" >&5 $as_echo_n "checking whether time.h and sys/time.h may both be included... " >&6; }-if test "${ac_cv_header_time+set}" = set; then :+if ${ac_cv_header_time+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext@@ -3534,7 +3558,7 @@ for ac_header in sys/time.h do : ac_fn_c_check_header_mongrel "$LINENO" "sys/time.h" "ac_cv_header_sys_time_h" "$ac_includes_default"-if test "x$ac_cv_header_sys_time_h" = x""yes; then :+if test "x$ac_cv_header_sys_time_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_SYS_TIME_H 1 _ACEOF@@ -3554,7 +3578,7 @@ # endif #endif "-if test "x$ac_cv_have_decl_altzone" = x""yes; then :+if test "x$ac_cv_have_decl_altzone" = xyes; then : ac_have_decl=1 else ac_have_decl=0@@ -3630,10 +3654,21 @@ :end' >>confcache if diff "$cache_file" confcache >/dev/null 2>&1; then :; else if test -w "$cache_file"; then- test "x$cache_file" != "x/dev/null" &&+ if test "x$cache_file" != "x/dev/null"; then { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 $as_echo "$as_me: updating cache $cache_file" >&6;}- cat confcache >$cache_file+ if test ! -f "$cache_file" || test -h "$cache_file"; then+ cat confcache >"$cache_file"+ else+ case $cache_file in #(+ */* | ?:*)+ mv -f confcache "$cache_file"$$ &&+ mv -f "$cache_file"$$ "$cache_file" ;; #(+ *)+ mv -f confcache "$cache_file" ;;+ esac+ fi+ fi else { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 $as_echo "$as_me: not updating unwritable cache $cache_file" >&6;}@@ -3665,7 +3700,7 @@ -: ${CONFIG_STATUS=./config.status}+: "${CONFIG_STATUS=./config.status}" ac_write_fail=0 ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files $CONFIG_STATUS"@@ -3766,6 +3801,7 @@ IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator.+as_myself= case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR@@ -4072,8 +4108,8 @@ # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log="-This file was extended by Haskell time package $as_me 1.3, which was-generated by GNU Autoconf 2.67. Invocation command line was+This file was extended by Haskell time package $as_me 1.4.0.2, which was+generated by GNU Autoconf 2.68. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS@@ -4125,8 +4161,8 @@ cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\-Haskell time package config.status 1.3-configured by $0, generated by GNU Autoconf 2.67,+Haskell time package config.status 1.4.0.2+configured by $0, generated by GNU Autoconf 2.68, with options \\"\$ac_cs_config\\" Copyright (C) 2010 Free Software Foundation, Inc.@@ -4240,7 +4276,7 @@ case $ac_config_target in "include/HsTimeConfig.h") CONFIG_HEADERS="$CONFIG_HEADERS include/HsTimeConfig.h" ;; - *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5 ;;+ *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;; esac done @@ -4261,9 +4297,10 @@ # after its creation but before its name has been assigned to `$tmp'. $debug || {- tmp=+ tmp= ac_tmp= trap 'exit_status=$?- { test -z "$tmp" || test ! -d "$tmp" || rm -fr "$tmp"; } && exit $exit_status+ : "${ac_tmp:=$tmp}"+ { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status ' 0 trap 'as_fn_exit 1' 1 2 13 15 }@@ -4271,18 +4308,19 @@ { tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` &&- test -n "$tmp" && test -d "$tmp"+ test -d "$tmp" } || { tmp=./conf$$-$RANDOM (umask 077 && mkdir "$tmp") } || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5+ac_tmp=$tmp # Set up the scripts for CONFIG_HEADERS section. # No need to generate them if there are no CONFIG_HEADERS. # This happens for instance with `./config.status Makefile'. if test -n "$CONFIG_HEADERS"; then-cat >"$tmp/defines.awk" <<\_ACAWK ||+cat >"$ac_tmp/defines.awk" <<\_ACAWK || BEGIN { _ACEOF @@ -4294,8 +4332,8 @@ # handling of long lines. ac_delim='%!_!# ' for ac_last_try in false false :; do- ac_t=`sed -n "/$ac_delim/p" confdefs.h`- if test -z "$ac_t"; then+ ac_tt=`sed -n "/$ac_delim/p" confdefs.h`+ if test -z "$ac_tt"; then break elif $ac_last_try; then as_fn_error $? "could not make $CONFIG_HEADERS" "$LINENO" 5@@ -4396,7 +4434,7 @@ esac case $ac_mode$ac_tag in :[FHL]*:*);;- :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5 ;;+ :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;; :[FH]-) ac_tag=-:-;; :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; esac@@ -4415,7 +4453,7 @@ for ac_f do case $ac_f in- -) ac_f="$tmp/stdin";;+ -) ac_f="$ac_tmp/stdin";; *) # Look for the file first in the build tree, then in the source tree # (if the path is not absolute). The absolute path cannot be DOS-style, # because $ac_f cannot contain `:'.@@ -4424,7 +4462,7 @@ [\\/$]*) false;; *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; esac ||- as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5 ;;+ as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;; esac case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac as_fn_append ac_file_inputs " '$ac_f'"@@ -4450,8 +4488,8 @@ esac case $ac_tag in- *:-:* | *:-) cat >"$tmp/stdin" \- || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;;+ *:-:* | *:-) cat >"$ac_tmp/stdin" \+ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; esac ;; esac@@ -4524,20 +4562,20 @@ if test x"$ac_file" != x-; then { $as_echo "/* $configure_input */" \- && eval '$AWK -f "$tmp/defines.awk"' "$ac_file_inputs"- } >"$tmp/config.h" \+ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs"+ } >"$ac_tmp/config.h" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5- if diff "$ac_file" "$tmp/config.h" >/dev/null 2>&1; then+ if diff "$ac_file" "$ac_tmp/config.h" >/dev/null 2>&1; then { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5 $as_echo "$as_me: $ac_file is unchanged" >&6;} else rm -f "$ac_file"- mv "$tmp/config.h" "$ac_file" \+ mv "$ac_tmp/config.h" "$ac_file" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 fi else $as_echo "/* $configure_input */" \- && eval '$AWK -f "$tmp/defines.awk"' "$ac_file_inputs" \+ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \ || as_fn_error $? "could not create -" "$LINENO" 5 fi ;;
configure.ac view
@@ -1,4 +1,4 @@-AC_INIT([Haskell time package], [1.3], [ashley@semantic.org], [time])+AC_INIT([Haskell time package], [1.4.0.2], [ashley@semantic.org], [time]) # Safety check: Ensure that we are in the correct source directory. AC_CONFIG_SRCDIR([include/HsTime.h])@@ -6,6 +6,8 @@ AC_ARG_WITH([cc], [C compiler], [CC=$withval])+AC_ARG_WITH([gcc],[Gnu C compiler])+AC_ARG_WITH([compiler],[Haskell compiler]) AC_PROG_CC() AC_CONFIG_HEADERS([include/HsTimeConfig.h])
include/HsTimeConfig.h view
@@ -66,7 +66,7 @@ #define PACKAGE_NAME "Haskell time package" /* Define to the full name and version of this package. */-#define PACKAGE_STRING "Haskell time package 1.3"+#define PACKAGE_STRING "Haskell time package 1.4.0.2" /* Define to the one symbol short name of this package. */ #define PACKAGE_TARNAME "time"@@ -75,7 +75,7 @@ #define PACKAGE_URL "" /* Define to the version of this package. */-#define PACKAGE_VERSION "1.3"+#define PACKAGE_VERSION "1.4.0.2" /* Define to 1 if you have the ANSI C header files. */ #define STDC_HEADERS 1
− test/AddDays.hs
@@ -1,41 +0,0 @@-{-# OPTIONS -Wall -Werror #-}--module Main where--import Data.Time.Calendar--days ::[Day]-days =- [- fromGregorian 2005 2 28,- fromGregorian 2004 2 29,- fromGregorian 2004 1 31,- fromGregorian 2004 12 31,- fromGregorian 2005 7 1,- fromGregorian 2005 4 21,- fromGregorian 2005 6 30- ]--increments :: [Integer]-increments = [-10,-4,-1,0,1,7,83]--adders :: [(String,Integer -> Day -> Day)]-adders =- [- ("day",addDays),- ("month (clip)",addGregorianMonthsClip),- ("month (roll over)",addGregorianMonthsRollOver),- ("year (clip)",addGregorianYearsClip),- ("year (roll over)",addGregorianYearsRollOver)- ]--resultDays :: [String]-resultDays = do- (aname,adder) <- adders- increment <- increments- day <- days- return ((showGregorian day) ++ " + " ++ (show increment) ++ " * " ++ aname ++ " = " ++ showGregorian (adder increment day))--main :: IO ()-main = do- mapM_ putStrLn resultDays
− test/AddDays.ref
@@ -1,245 +0,0 @@-2005-02-28 + -10 * day = 2005-02-18-2004-02-29 + -10 * day = 2004-02-19-2004-01-31 + -10 * day = 2004-01-21-2004-12-31 + -10 * day = 2004-12-21-2005-07-01 + -10 * day = 2005-06-21-2005-04-21 + -10 * day = 2005-04-11-2005-06-30 + -10 * day = 2005-06-20-2005-02-28 + -4 * day = 2005-02-24-2004-02-29 + -4 * day = 2004-02-25-2004-01-31 + -4 * day = 2004-01-27-2004-12-31 + -4 * day = 2004-12-27-2005-07-01 + -4 * day = 2005-06-27-2005-04-21 + -4 * day = 2005-04-17-2005-06-30 + -4 * day = 2005-06-26-2005-02-28 + -1 * day = 2005-02-27-2004-02-29 + -1 * day = 2004-02-28-2004-01-31 + -1 * day = 2004-01-30-2004-12-31 + -1 * day = 2004-12-30-2005-07-01 + -1 * day = 2005-06-30-2005-04-21 + -1 * day = 2005-04-20-2005-06-30 + -1 * day = 2005-06-29-2005-02-28 + 0 * day = 2005-02-28-2004-02-29 + 0 * day = 2004-02-29-2004-01-31 + 0 * day = 2004-01-31-2004-12-31 + 0 * day = 2004-12-31-2005-07-01 + 0 * day = 2005-07-01-2005-04-21 + 0 * day = 2005-04-21-2005-06-30 + 0 * day = 2005-06-30-2005-02-28 + 1 * day = 2005-03-01-2004-02-29 + 1 * day = 2004-03-01-2004-01-31 + 1 * day = 2004-02-01-2004-12-31 + 1 * day = 2005-01-01-2005-07-01 + 1 * day = 2005-07-02-2005-04-21 + 1 * day = 2005-04-22-2005-06-30 + 1 * day = 2005-07-01-2005-02-28 + 7 * day = 2005-03-07-2004-02-29 + 7 * day = 2004-03-07-2004-01-31 + 7 * day = 2004-02-07-2004-12-31 + 7 * day = 2005-01-07-2005-07-01 + 7 * day = 2005-07-08-2005-04-21 + 7 * day = 2005-04-28-2005-06-30 + 7 * day = 2005-07-07-2005-02-28 + 83 * day = 2005-05-22-2004-02-29 + 83 * day = 2004-05-22-2004-01-31 + 83 * day = 2004-04-23-2004-12-31 + 83 * day = 2005-03-24-2005-07-01 + 83 * day = 2005-09-22-2005-04-21 + 83 * day = 2005-07-13-2005-06-30 + 83 * day = 2005-09-21-2005-02-28 + -10 * month (clip) = 2004-04-28-2004-02-29 + -10 * month (clip) = 2003-04-29-2004-01-31 + -10 * month (clip) = 2003-03-31-2004-12-31 + -10 * month (clip) = 2004-02-29-2005-07-01 + -10 * month (clip) = 2004-09-01-2005-04-21 + -10 * month (clip) = 2004-06-21-2005-06-30 + -10 * month (clip) = 2004-08-30-2005-02-28 + -4 * month (clip) = 2004-10-28-2004-02-29 + -4 * month (clip) = 2003-10-29-2004-01-31 + -4 * month (clip) = 2003-09-30-2004-12-31 + -4 * month (clip) = 2004-08-31-2005-07-01 + -4 * month (clip) = 2005-03-01-2005-04-21 + -4 * month (clip) = 2004-12-21-2005-06-30 + -4 * month (clip) = 2005-02-28-2005-02-28 + -1 * month (clip) = 2005-01-28-2004-02-29 + -1 * month (clip) = 2004-01-29-2004-01-31 + -1 * month (clip) = 2003-12-31-2004-12-31 + -1 * month (clip) = 2004-11-30-2005-07-01 + -1 * month (clip) = 2005-06-01-2005-04-21 + -1 * month (clip) = 2005-03-21-2005-06-30 + -1 * month (clip) = 2005-05-30-2005-02-28 + 0 * month (clip) = 2005-02-28-2004-02-29 + 0 * month (clip) = 2004-02-29-2004-01-31 + 0 * month (clip) = 2004-01-31-2004-12-31 + 0 * month (clip) = 2004-12-31-2005-07-01 + 0 * month (clip) = 2005-07-01-2005-04-21 + 0 * month (clip) = 2005-04-21-2005-06-30 + 0 * month (clip) = 2005-06-30-2005-02-28 + 1 * month (clip) = 2005-03-28-2004-02-29 + 1 * month (clip) = 2004-03-29-2004-01-31 + 1 * month (clip) = 2004-02-29-2004-12-31 + 1 * month (clip) = 2005-01-31-2005-07-01 + 1 * month (clip) = 2005-08-01-2005-04-21 + 1 * month (clip) = 2005-05-21-2005-06-30 + 1 * month (clip) = 2005-07-30-2005-02-28 + 7 * month (clip) = 2005-09-28-2004-02-29 + 7 * month (clip) = 2004-09-29-2004-01-31 + 7 * month (clip) = 2004-08-31-2004-12-31 + 7 * month (clip) = 2005-07-31-2005-07-01 + 7 * month (clip) = 2006-02-01-2005-04-21 + 7 * month (clip) = 2005-11-21-2005-06-30 + 7 * month (clip) = 2006-01-30-2005-02-28 + 83 * month (clip) = 2012-01-28-2004-02-29 + 83 * month (clip) = 2011-01-29-2004-01-31 + 83 * month (clip) = 2010-12-31-2004-12-31 + 83 * month (clip) = 2011-11-30-2005-07-01 + 83 * month (clip) = 2012-06-01-2005-04-21 + 83 * month (clip) = 2012-03-21-2005-06-30 + 83 * month (clip) = 2012-05-30-2005-02-28 + -10 * month (roll over) = 2004-04-28-2004-02-29 + -10 * month (roll over) = 2003-04-29-2004-01-31 + -10 * month (roll over) = 2003-03-31-2004-12-31 + -10 * month (roll over) = 2004-03-02-2005-07-01 + -10 * month (roll over) = 2004-09-01-2005-04-21 + -10 * month (roll over) = 2004-06-21-2005-06-30 + -10 * month (roll over) = 2004-08-30-2005-02-28 + -4 * month (roll over) = 2004-10-28-2004-02-29 + -4 * month (roll over) = 2003-10-29-2004-01-31 + -4 * month (roll over) = 2003-10-01-2004-12-31 + -4 * month (roll over) = 2004-08-31-2005-07-01 + -4 * month (roll over) = 2005-03-01-2005-04-21 + -4 * month (roll over) = 2004-12-21-2005-06-30 + -4 * month (roll over) = 2005-03-02-2005-02-28 + -1 * month (roll over) = 2005-01-28-2004-02-29 + -1 * month (roll over) = 2004-01-29-2004-01-31 + -1 * month (roll over) = 2003-12-31-2004-12-31 + -1 * month (roll over) = 2004-12-01-2005-07-01 + -1 * month (roll over) = 2005-06-01-2005-04-21 + -1 * month (roll over) = 2005-03-21-2005-06-30 + -1 * month (roll over) = 2005-05-30-2005-02-28 + 0 * month (roll over) = 2005-02-28-2004-02-29 + 0 * month (roll over) = 2004-02-29-2004-01-31 + 0 * month (roll over) = 2004-01-31-2004-12-31 + 0 * month (roll over) = 2004-12-31-2005-07-01 + 0 * month (roll over) = 2005-07-01-2005-04-21 + 0 * month (roll over) = 2005-04-21-2005-06-30 + 0 * month (roll over) = 2005-06-30-2005-02-28 + 1 * month (roll over) = 2005-03-28-2004-02-29 + 1 * month (roll over) = 2004-03-29-2004-01-31 + 1 * month (roll over) = 2004-03-02-2004-12-31 + 1 * month (roll over) = 2005-01-31-2005-07-01 + 1 * month (roll over) = 2005-08-01-2005-04-21 + 1 * month (roll over) = 2005-05-21-2005-06-30 + 1 * month (roll over) = 2005-07-30-2005-02-28 + 7 * month (roll over) = 2005-09-28-2004-02-29 + 7 * month (roll over) = 2004-09-29-2004-01-31 + 7 * month (roll over) = 2004-08-31-2004-12-31 + 7 * month (roll over) = 2005-07-31-2005-07-01 + 7 * month (roll over) = 2006-02-01-2005-04-21 + 7 * month (roll over) = 2005-11-21-2005-06-30 + 7 * month (roll over) = 2006-01-30-2005-02-28 + 83 * month (roll over) = 2012-01-28-2004-02-29 + 83 * month (roll over) = 2011-01-29-2004-01-31 + 83 * month (roll over) = 2010-12-31-2004-12-31 + 83 * month (roll over) = 2011-12-01-2005-07-01 + 83 * month (roll over) = 2012-06-01-2005-04-21 + 83 * month (roll over) = 2012-03-21-2005-06-30 + 83 * month (roll over) = 2012-05-30-2005-02-28 + -10 * year (clip) = 1995-02-28-2004-02-29 + -10 * year (clip) = 1994-02-28-2004-01-31 + -10 * year (clip) = 1994-01-31-2004-12-31 + -10 * year (clip) = 1994-12-31-2005-07-01 + -10 * year (clip) = 1995-07-01-2005-04-21 + -10 * year (clip) = 1995-04-21-2005-06-30 + -10 * year (clip) = 1995-06-30-2005-02-28 + -4 * year (clip) = 2001-02-28-2004-02-29 + -4 * year (clip) = 2000-02-29-2004-01-31 + -4 * year (clip) = 2000-01-31-2004-12-31 + -4 * year (clip) = 2000-12-31-2005-07-01 + -4 * year (clip) = 2001-07-01-2005-04-21 + -4 * year (clip) = 2001-04-21-2005-06-30 + -4 * year (clip) = 2001-06-30-2005-02-28 + -1 * year (clip) = 2004-02-28-2004-02-29 + -1 * year (clip) = 2003-02-28-2004-01-31 + -1 * year (clip) = 2003-01-31-2004-12-31 + -1 * year (clip) = 2003-12-31-2005-07-01 + -1 * year (clip) = 2004-07-01-2005-04-21 + -1 * year (clip) = 2004-04-21-2005-06-30 + -1 * year (clip) = 2004-06-30-2005-02-28 + 0 * year (clip) = 2005-02-28-2004-02-29 + 0 * year (clip) = 2004-02-29-2004-01-31 + 0 * year (clip) = 2004-01-31-2004-12-31 + 0 * year (clip) = 2004-12-31-2005-07-01 + 0 * year (clip) = 2005-07-01-2005-04-21 + 0 * year (clip) = 2005-04-21-2005-06-30 + 0 * year (clip) = 2005-06-30-2005-02-28 + 1 * year (clip) = 2006-02-28-2004-02-29 + 1 * year (clip) = 2005-02-28-2004-01-31 + 1 * year (clip) = 2005-01-31-2004-12-31 + 1 * year (clip) = 2005-12-31-2005-07-01 + 1 * year (clip) = 2006-07-01-2005-04-21 + 1 * year (clip) = 2006-04-21-2005-06-30 + 1 * year (clip) = 2006-06-30-2005-02-28 + 7 * year (clip) = 2012-02-28-2004-02-29 + 7 * year (clip) = 2011-02-28-2004-01-31 + 7 * year (clip) = 2011-01-31-2004-12-31 + 7 * year (clip) = 2011-12-31-2005-07-01 + 7 * year (clip) = 2012-07-01-2005-04-21 + 7 * year (clip) = 2012-04-21-2005-06-30 + 7 * year (clip) = 2012-06-30-2005-02-28 + 83 * year (clip) = 2088-02-28-2004-02-29 + 83 * year (clip) = 2087-02-28-2004-01-31 + 83 * year (clip) = 2087-01-31-2004-12-31 + 83 * year (clip) = 2087-12-31-2005-07-01 + 83 * year (clip) = 2088-07-01-2005-04-21 + 83 * year (clip) = 2088-04-21-2005-06-30 + 83 * year (clip) = 2088-06-30-2005-02-28 + -10 * year (roll over) = 1995-02-28-2004-02-29 + -10 * year (roll over) = 1994-03-01-2004-01-31 + -10 * year (roll over) = 1994-01-31-2004-12-31 + -10 * year (roll over) = 1994-12-31-2005-07-01 + -10 * year (roll over) = 1995-07-01-2005-04-21 + -10 * year (roll over) = 1995-04-21-2005-06-30 + -10 * year (roll over) = 1995-06-30-2005-02-28 + -4 * year (roll over) = 2001-02-28-2004-02-29 + -4 * year (roll over) = 2000-02-29-2004-01-31 + -4 * year (roll over) = 2000-01-31-2004-12-31 + -4 * year (roll over) = 2000-12-31-2005-07-01 + -4 * year (roll over) = 2001-07-01-2005-04-21 + -4 * year (roll over) = 2001-04-21-2005-06-30 + -4 * year (roll over) = 2001-06-30-2005-02-28 + -1 * year (roll over) = 2004-02-28-2004-02-29 + -1 * year (roll over) = 2003-03-01-2004-01-31 + -1 * year (roll over) = 2003-01-31-2004-12-31 + -1 * year (roll over) = 2003-12-31-2005-07-01 + -1 * year (roll over) = 2004-07-01-2005-04-21 + -1 * year (roll over) = 2004-04-21-2005-06-30 + -1 * year (roll over) = 2004-06-30-2005-02-28 + 0 * year (roll over) = 2005-02-28-2004-02-29 + 0 * year (roll over) = 2004-02-29-2004-01-31 + 0 * year (roll over) = 2004-01-31-2004-12-31 + 0 * year (roll over) = 2004-12-31-2005-07-01 + 0 * year (roll over) = 2005-07-01-2005-04-21 + 0 * year (roll over) = 2005-04-21-2005-06-30 + 0 * year (roll over) = 2005-06-30-2005-02-28 + 1 * year (roll over) = 2006-02-28-2004-02-29 + 1 * year (roll over) = 2005-03-01-2004-01-31 + 1 * year (roll over) = 2005-01-31-2004-12-31 + 1 * year (roll over) = 2005-12-31-2005-07-01 + 1 * year (roll over) = 2006-07-01-2005-04-21 + 1 * year (roll over) = 2006-04-21-2005-06-30 + 1 * year (roll over) = 2006-06-30-2005-02-28 + 7 * year (roll over) = 2012-02-28-2004-02-29 + 7 * year (roll over) = 2011-03-01-2004-01-31 + 7 * year (roll over) = 2011-01-31-2004-12-31 + 7 * year (roll over) = 2011-12-31-2005-07-01 + 7 * year (roll over) = 2012-07-01-2005-04-21 + 7 * year (roll over) = 2012-04-21-2005-06-30 + 7 * year (roll over) = 2012-06-30-2005-02-28 + 83 * year (roll over) = 2088-02-28-2004-02-29 + 83 * year (roll over) = 2087-03-01-2004-01-31 + 83 * year (roll over) = 2087-01-31-2004-12-31 + 83 * year (roll over) = 2087-12-31-2005-07-01 + 83 * year (roll over) = 2088-07-01-2005-04-21 + 83 * year (roll over) = 2088-04-21-2005-06-30 + 83 * year (roll over) = 2088-06-30
− test/ClipDates.hs
@@ -1,26 +0,0 @@-{-# OPTIONS -Wall -Werror #-}--module Main where--import Data.Time.Calendar.OrdinalDate-import Data.Time.Calendar.WeekDate-import Data.Time.Calendar-import Control.Monad--checkYearAndDay :: (Integer,Int) -> IO ()-checkYearAndDay (y,d) = putStrLn ((show y) ++ "-" ++ (show d) ++ " = " ++ (showOrdinalDate (fromOrdinalDate y d)))--checkGregorian :: (Integer,Int,Int) -> IO ()-checkGregorian (y,m,d) = putStrLn ((show y) ++ "-" ++ (show m) ++ "-" ++ (show d) ++ " = " ++ (showGregorian (fromGregorian y m d)))--checkISOWeekDay :: (Integer,Int,Int) -> IO ()-checkISOWeekDay (y,w,d) = putStrLn ((show y) ++ "-W" ++ (show w) ++ "-" ++ (show d) ++ " = " ++ (showWeekDate (fromWeekDate y w d)))--main :: IO ()-main = do- putStrLn "YearAndDay"- mapM_ checkYearAndDay (liftM2 (,) [1968,1969,1971] [-4,0,1,200,364,365,366,367,700])- putStrLn "Gregorian"- mapM_ checkGregorian (liftM3 (,,) [1968,1969,1971] [-20,-1,0,1,2,12,13,17] [-7,-1,0,1,2,27,28,29,30,31,32,40])- putStrLn "ISOWeekDay"- mapM_ checkISOWeekDay (liftM3 (,,) [1968,1969,2004] [-20,-1,0,1,20,51,52,53,54] [-2,-1,0,1,4,6,7,8,9])
− test/ClipDates.ref
@@ -1,561 +0,0 @@-YearAndDay-1968--4 = 1968-001-1968-0 = 1968-001-1968-1 = 1968-001-1968-200 = 1968-200-1968-364 = 1968-364-1968-365 = 1968-365-1968-366 = 1968-366-1968-367 = 1968-366-1968-700 = 1968-366-1969--4 = 1969-001-1969-0 = 1969-001-1969-1 = 1969-001-1969-200 = 1969-200-1969-364 = 1969-364-1969-365 = 1969-365-1969-366 = 1969-365-1969-367 = 1969-365-1969-700 = 1969-365-1971--4 = 1971-001-1971-0 = 1971-001-1971-1 = 1971-001-1971-200 = 1971-200-1971-364 = 1971-364-1971-365 = 1971-365-1971-366 = 1971-365-1971-367 = 1971-365-1971-700 = 1971-365-Gregorian-1968--20--7 = 1968-01-01-1968--20--1 = 1968-01-01-1968--20-0 = 1968-01-01-1968--20-1 = 1968-01-01-1968--20-2 = 1968-01-02-1968--20-27 = 1968-01-27-1968--20-28 = 1968-01-28-1968--20-29 = 1968-01-29-1968--20-30 = 1968-01-30-1968--20-31 = 1968-01-31-1968--20-32 = 1968-01-31-1968--20-40 = 1968-01-31-1968--1--7 = 1968-01-01-1968--1--1 = 1968-01-01-1968--1-0 = 1968-01-01-1968--1-1 = 1968-01-01-1968--1-2 = 1968-01-02-1968--1-27 = 1968-01-27-1968--1-28 = 1968-01-28-1968--1-29 = 1968-01-29-1968--1-30 = 1968-01-30-1968--1-31 = 1968-01-31-1968--1-32 = 1968-01-31-1968--1-40 = 1968-01-31-1968-0--7 = 1968-01-01-1968-0--1 = 1968-01-01-1968-0-0 = 1968-01-01-1968-0-1 = 1968-01-01-1968-0-2 = 1968-01-02-1968-0-27 = 1968-01-27-1968-0-28 = 1968-01-28-1968-0-29 = 1968-01-29-1968-0-30 = 1968-01-30-1968-0-31 = 1968-01-31-1968-0-32 = 1968-01-31-1968-0-40 = 1968-01-31-1968-1--7 = 1968-01-01-1968-1--1 = 1968-01-01-1968-1-0 = 1968-01-01-1968-1-1 = 1968-01-01-1968-1-2 = 1968-01-02-1968-1-27 = 1968-01-27-1968-1-28 = 1968-01-28-1968-1-29 = 1968-01-29-1968-1-30 = 1968-01-30-1968-1-31 = 1968-01-31-1968-1-32 = 1968-01-31-1968-1-40 = 1968-01-31-1968-2--7 = 1968-02-01-1968-2--1 = 1968-02-01-1968-2-0 = 1968-02-01-1968-2-1 = 1968-02-01-1968-2-2 = 1968-02-02-1968-2-27 = 1968-02-27-1968-2-28 = 1968-02-28-1968-2-29 = 1968-02-29-1968-2-30 = 1968-02-29-1968-2-31 = 1968-02-29-1968-2-32 = 1968-02-29-1968-2-40 = 1968-02-29-1968-12--7 = 1968-12-01-1968-12--1 = 1968-12-01-1968-12-0 = 1968-12-01-1968-12-1 = 1968-12-01-1968-12-2 = 1968-12-02-1968-12-27 = 1968-12-27-1968-12-28 = 1968-12-28-1968-12-29 = 1968-12-29-1968-12-30 = 1968-12-30-1968-12-31 = 1968-12-31-1968-12-32 = 1968-12-31-1968-12-40 = 1968-12-31-1968-13--7 = 1968-12-01-1968-13--1 = 1968-12-01-1968-13-0 = 1968-12-01-1968-13-1 = 1968-12-01-1968-13-2 = 1968-12-02-1968-13-27 = 1968-12-27-1968-13-28 = 1968-12-28-1968-13-29 = 1968-12-29-1968-13-30 = 1968-12-30-1968-13-31 = 1968-12-31-1968-13-32 = 1968-12-31-1968-13-40 = 1968-12-31-1968-17--7 = 1968-12-01-1968-17--1 = 1968-12-01-1968-17-0 = 1968-12-01-1968-17-1 = 1968-12-01-1968-17-2 = 1968-12-02-1968-17-27 = 1968-12-27-1968-17-28 = 1968-12-28-1968-17-29 = 1968-12-29-1968-17-30 = 1968-12-30-1968-17-31 = 1968-12-31-1968-17-32 = 1968-12-31-1968-17-40 = 1968-12-31-1969--20--7 = 1969-01-01-1969--20--1 = 1969-01-01-1969--20-0 = 1969-01-01-1969--20-1 = 1969-01-01-1969--20-2 = 1969-01-02-1969--20-27 = 1969-01-27-1969--20-28 = 1969-01-28-1969--20-29 = 1969-01-29-1969--20-30 = 1969-01-30-1969--20-31 = 1969-01-31-1969--20-32 = 1969-01-31-1969--20-40 = 1969-01-31-1969--1--7 = 1969-01-01-1969--1--1 = 1969-01-01-1969--1-0 = 1969-01-01-1969--1-1 = 1969-01-01-1969--1-2 = 1969-01-02-1969--1-27 = 1969-01-27-1969--1-28 = 1969-01-28-1969--1-29 = 1969-01-29-1969--1-30 = 1969-01-30-1969--1-31 = 1969-01-31-1969--1-32 = 1969-01-31-1969--1-40 = 1969-01-31-1969-0--7 = 1969-01-01-1969-0--1 = 1969-01-01-1969-0-0 = 1969-01-01-1969-0-1 = 1969-01-01-1969-0-2 = 1969-01-02-1969-0-27 = 1969-01-27-1969-0-28 = 1969-01-28-1969-0-29 = 1969-01-29-1969-0-30 = 1969-01-30-1969-0-31 = 1969-01-31-1969-0-32 = 1969-01-31-1969-0-40 = 1969-01-31-1969-1--7 = 1969-01-01-1969-1--1 = 1969-01-01-1969-1-0 = 1969-01-01-1969-1-1 = 1969-01-01-1969-1-2 = 1969-01-02-1969-1-27 = 1969-01-27-1969-1-28 = 1969-01-28-1969-1-29 = 1969-01-29-1969-1-30 = 1969-01-30-1969-1-31 = 1969-01-31-1969-1-32 = 1969-01-31-1969-1-40 = 1969-01-31-1969-2--7 = 1969-02-01-1969-2--1 = 1969-02-01-1969-2-0 = 1969-02-01-1969-2-1 = 1969-02-01-1969-2-2 = 1969-02-02-1969-2-27 = 1969-02-27-1969-2-28 = 1969-02-28-1969-2-29 = 1969-02-28-1969-2-30 = 1969-02-28-1969-2-31 = 1969-02-28-1969-2-32 = 1969-02-28-1969-2-40 = 1969-02-28-1969-12--7 = 1969-12-01-1969-12--1 = 1969-12-01-1969-12-0 = 1969-12-01-1969-12-1 = 1969-12-01-1969-12-2 = 1969-12-02-1969-12-27 = 1969-12-27-1969-12-28 = 1969-12-28-1969-12-29 = 1969-12-29-1969-12-30 = 1969-12-30-1969-12-31 = 1969-12-31-1969-12-32 = 1969-12-31-1969-12-40 = 1969-12-31-1969-13--7 = 1969-12-01-1969-13--1 = 1969-12-01-1969-13-0 = 1969-12-01-1969-13-1 = 1969-12-01-1969-13-2 = 1969-12-02-1969-13-27 = 1969-12-27-1969-13-28 = 1969-12-28-1969-13-29 = 1969-12-29-1969-13-30 = 1969-12-30-1969-13-31 = 1969-12-31-1969-13-32 = 1969-12-31-1969-13-40 = 1969-12-31-1969-17--7 = 1969-12-01-1969-17--1 = 1969-12-01-1969-17-0 = 1969-12-01-1969-17-1 = 1969-12-01-1969-17-2 = 1969-12-02-1969-17-27 = 1969-12-27-1969-17-28 = 1969-12-28-1969-17-29 = 1969-12-29-1969-17-30 = 1969-12-30-1969-17-31 = 1969-12-31-1969-17-32 = 1969-12-31-1969-17-40 = 1969-12-31-1971--20--7 = 1971-01-01-1971--20--1 = 1971-01-01-1971--20-0 = 1971-01-01-1971--20-1 = 1971-01-01-1971--20-2 = 1971-01-02-1971--20-27 = 1971-01-27-1971--20-28 = 1971-01-28-1971--20-29 = 1971-01-29-1971--20-30 = 1971-01-30-1971--20-31 = 1971-01-31-1971--20-32 = 1971-01-31-1971--20-40 = 1971-01-31-1971--1--7 = 1971-01-01-1971--1--1 = 1971-01-01-1971--1-0 = 1971-01-01-1971--1-1 = 1971-01-01-1971--1-2 = 1971-01-02-1971--1-27 = 1971-01-27-1971--1-28 = 1971-01-28-1971--1-29 = 1971-01-29-1971--1-30 = 1971-01-30-1971--1-31 = 1971-01-31-1971--1-32 = 1971-01-31-1971--1-40 = 1971-01-31-1971-0--7 = 1971-01-01-1971-0--1 = 1971-01-01-1971-0-0 = 1971-01-01-1971-0-1 = 1971-01-01-1971-0-2 = 1971-01-02-1971-0-27 = 1971-01-27-1971-0-28 = 1971-01-28-1971-0-29 = 1971-01-29-1971-0-30 = 1971-01-30-1971-0-31 = 1971-01-31-1971-0-32 = 1971-01-31-1971-0-40 = 1971-01-31-1971-1--7 = 1971-01-01-1971-1--1 = 1971-01-01-1971-1-0 = 1971-01-01-1971-1-1 = 1971-01-01-1971-1-2 = 1971-01-02-1971-1-27 = 1971-01-27-1971-1-28 = 1971-01-28-1971-1-29 = 1971-01-29-1971-1-30 = 1971-01-30-1971-1-31 = 1971-01-31-1971-1-32 = 1971-01-31-1971-1-40 = 1971-01-31-1971-2--7 = 1971-02-01-1971-2--1 = 1971-02-01-1971-2-0 = 1971-02-01-1971-2-1 = 1971-02-01-1971-2-2 = 1971-02-02-1971-2-27 = 1971-02-27-1971-2-28 = 1971-02-28-1971-2-29 = 1971-02-28-1971-2-30 = 1971-02-28-1971-2-31 = 1971-02-28-1971-2-32 = 1971-02-28-1971-2-40 = 1971-02-28-1971-12--7 = 1971-12-01-1971-12--1 = 1971-12-01-1971-12-0 = 1971-12-01-1971-12-1 = 1971-12-01-1971-12-2 = 1971-12-02-1971-12-27 = 1971-12-27-1971-12-28 = 1971-12-28-1971-12-29 = 1971-12-29-1971-12-30 = 1971-12-30-1971-12-31 = 1971-12-31-1971-12-32 = 1971-12-31-1971-12-40 = 1971-12-31-1971-13--7 = 1971-12-01-1971-13--1 = 1971-12-01-1971-13-0 = 1971-12-01-1971-13-1 = 1971-12-01-1971-13-2 = 1971-12-02-1971-13-27 = 1971-12-27-1971-13-28 = 1971-12-28-1971-13-29 = 1971-12-29-1971-13-30 = 1971-12-30-1971-13-31 = 1971-12-31-1971-13-32 = 1971-12-31-1971-13-40 = 1971-12-31-1971-17--7 = 1971-12-01-1971-17--1 = 1971-12-01-1971-17-0 = 1971-12-01-1971-17-1 = 1971-12-01-1971-17-2 = 1971-12-02-1971-17-27 = 1971-12-27-1971-17-28 = 1971-12-28-1971-17-29 = 1971-12-29-1971-17-30 = 1971-12-30-1971-17-31 = 1971-12-31-1971-17-32 = 1971-12-31-1971-17-40 = 1971-12-31-ISOWeekDay-1968-W-20--2 = 1968-W01-1-1968-W-20--1 = 1968-W01-1-1968-W-20-0 = 1968-W01-1-1968-W-20-1 = 1968-W01-1-1968-W-20-4 = 1968-W01-4-1968-W-20-6 = 1968-W01-6-1968-W-20-7 = 1968-W01-7-1968-W-20-8 = 1968-W01-7-1968-W-20-9 = 1968-W01-7-1968-W-1--2 = 1968-W01-1-1968-W-1--1 = 1968-W01-1-1968-W-1-0 = 1968-W01-1-1968-W-1-1 = 1968-W01-1-1968-W-1-4 = 1968-W01-4-1968-W-1-6 = 1968-W01-6-1968-W-1-7 = 1968-W01-7-1968-W-1-8 = 1968-W01-7-1968-W-1-9 = 1968-W01-7-1968-W0--2 = 1968-W01-1-1968-W0--1 = 1968-W01-1-1968-W0-0 = 1968-W01-1-1968-W0-1 = 1968-W01-1-1968-W0-4 = 1968-W01-4-1968-W0-6 = 1968-W01-6-1968-W0-7 = 1968-W01-7-1968-W0-8 = 1968-W01-7-1968-W0-9 = 1968-W01-7-1968-W1--2 = 1968-W01-1-1968-W1--1 = 1968-W01-1-1968-W1-0 = 1968-W01-1-1968-W1-1 = 1968-W01-1-1968-W1-4 = 1968-W01-4-1968-W1-6 = 1968-W01-6-1968-W1-7 = 1968-W01-7-1968-W1-8 = 1968-W01-7-1968-W1-9 = 1968-W01-7-1968-W20--2 = 1968-W20-1-1968-W20--1 = 1968-W20-1-1968-W20-0 = 1968-W20-1-1968-W20-1 = 1968-W20-1-1968-W20-4 = 1968-W20-4-1968-W20-6 = 1968-W20-6-1968-W20-7 = 1968-W20-7-1968-W20-8 = 1968-W20-7-1968-W20-9 = 1968-W20-7-1968-W51--2 = 1968-W51-1-1968-W51--1 = 1968-W51-1-1968-W51-0 = 1968-W51-1-1968-W51-1 = 1968-W51-1-1968-W51-4 = 1968-W51-4-1968-W51-6 = 1968-W51-6-1968-W51-7 = 1968-W51-7-1968-W51-8 = 1968-W51-7-1968-W51-9 = 1968-W51-7-1968-W52--2 = 1968-W52-1-1968-W52--1 = 1968-W52-1-1968-W52-0 = 1968-W52-1-1968-W52-1 = 1968-W52-1-1968-W52-4 = 1968-W52-4-1968-W52-6 = 1968-W52-6-1968-W52-7 = 1968-W52-7-1968-W52-8 = 1968-W52-7-1968-W52-9 = 1968-W52-7-1968-W53--2 = 1968-W52-1-1968-W53--1 = 1968-W52-1-1968-W53-0 = 1968-W52-1-1968-W53-1 = 1968-W52-1-1968-W53-4 = 1968-W52-4-1968-W53-6 = 1968-W52-6-1968-W53-7 = 1968-W52-7-1968-W53-8 = 1968-W52-7-1968-W53-9 = 1968-W52-7-1968-W54--2 = 1968-W52-1-1968-W54--1 = 1968-W52-1-1968-W54-0 = 1968-W52-1-1968-W54-1 = 1968-W52-1-1968-W54-4 = 1968-W52-4-1968-W54-6 = 1968-W52-6-1968-W54-7 = 1968-W52-7-1968-W54-8 = 1968-W52-7-1968-W54-9 = 1968-W52-7-1969-W-20--2 = 1969-W01-1-1969-W-20--1 = 1969-W01-1-1969-W-20-0 = 1969-W01-1-1969-W-20-1 = 1969-W01-1-1969-W-20-4 = 1969-W01-4-1969-W-20-6 = 1969-W01-6-1969-W-20-7 = 1969-W01-7-1969-W-20-8 = 1969-W01-7-1969-W-20-9 = 1969-W01-7-1969-W-1--2 = 1969-W01-1-1969-W-1--1 = 1969-W01-1-1969-W-1-0 = 1969-W01-1-1969-W-1-1 = 1969-W01-1-1969-W-1-4 = 1969-W01-4-1969-W-1-6 = 1969-W01-6-1969-W-1-7 = 1969-W01-7-1969-W-1-8 = 1969-W01-7-1969-W-1-9 = 1969-W01-7-1969-W0--2 = 1969-W01-1-1969-W0--1 = 1969-W01-1-1969-W0-0 = 1969-W01-1-1969-W0-1 = 1969-W01-1-1969-W0-4 = 1969-W01-4-1969-W0-6 = 1969-W01-6-1969-W0-7 = 1969-W01-7-1969-W0-8 = 1969-W01-7-1969-W0-9 = 1969-W01-7-1969-W1--2 = 1969-W01-1-1969-W1--1 = 1969-W01-1-1969-W1-0 = 1969-W01-1-1969-W1-1 = 1969-W01-1-1969-W1-4 = 1969-W01-4-1969-W1-6 = 1969-W01-6-1969-W1-7 = 1969-W01-7-1969-W1-8 = 1969-W01-7-1969-W1-9 = 1969-W01-7-1969-W20--2 = 1969-W20-1-1969-W20--1 = 1969-W20-1-1969-W20-0 = 1969-W20-1-1969-W20-1 = 1969-W20-1-1969-W20-4 = 1969-W20-4-1969-W20-6 = 1969-W20-6-1969-W20-7 = 1969-W20-7-1969-W20-8 = 1969-W20-7-1969-W20-9 = 1969-W20-7-1969-W51--2 = 1969-W51-1-1969-W51--1 = 1969-W51-1-1969-W51-0 = 1969-W51-1-1969-W51-1 = 1969-W51-1-1969-W51-4 = 1969-W51-4-1969-W51-6 = 1969-W51-6-1969-W51-7 = 1969-W51-7-1969-W51-8 = 1969-W51-7-1969-W51-9 = 1969-W51-7-1969-W52--2 = 1969-W52-1-1969-W52--1 = 1969-W52-1-1969-W52-0 = 1969-W52-1-1969-W52-1 = 1969-W52-1-1969-W52-4 = 1969-W52-4-1969-W52-6 = 1969-W52-6-1969-W52-7 = 1969-W52-7-1969-W52-8 = 1969-W52-7-1969-W52-9 = 1969-W52-7-1969-W53--2 = 1969-W52-1-1969-W53--1 = 1969-W52-1-1969-W53-0 = 1969-W52-1-1969-W53-1 = 1969-W52-1-1969-W53-4 = 1969-W52-4-1969-W53-6 = 1969-W52-6-1969-W53-7 = 1969-W52-7-1969-W53-8 = 1969-W52-7-1969-W53-9 = 1969-W52-7-1969-W54--2 = 1969-W52-1-1969-W54--1 = 1969-W52-1-1969-W54-0 = 1969-W52-1-1969-W54-1 = 1969-W52-1-1969-W54-4 = 1969-W52-4-1969-W54-6 = 1969-W52-6-1969-W54-7 = 1969-W52-7-1969-W54-8 = 1969-W52-7-1969-W54-9 = 1969-W52-7-2004-W-20--2 = 2004-W01-1-2004-W-20--1 = 2004-W01-1-2004-W-20-0 = 2004-W01-1-2004-W-20-1 = 2004-W01-1-2004-W-20-4 = 2004-W01-4-2004-W-20-6 = 2004-W01-6-2004-W-20-7 = 2004-W01-7-2004-W-20-8 = 2004-W01-7-2004-W-20-9 = 2004-W01-7-2004-W-1--2 = 2004-W01-1-2004-W-1--1 = 2004-W01-1-2004-W-1-0 = 2004-W01-1-2004-W-1-1 = 2004-W01-1-2004-W-1-4 = 2004-W01-4-2004-W-1-6 = 2004-W01-6-2004-W-1-7 = 2004-W01-7-2004-W-1-8 = 2004-W01-7-2004-W-1-9 = 2004-W01-7-2004-W0--2 = 2004-W01-1-2004-W0--1 = 2004-W01-1-2004-W0-0 = 2004-W01-1-2004-W0-1 = 2004-W01-1-2004-W0-4 = 2004-W01-4-2004-W0-6 = 2004-W01-6-2004-W0-7 = 2004-W01-7-2004-W0-8 = 2004-W01-7-2004-W0-9 = 2004-W01-7-2004-W1--2 = 2004-W01-1-2004-W1--1 = 2004-W01-1-2004-W1-0 = 2004-W01-1-2004-W1-1 = 2004-W01-1-2004-W1-4 = 2004-W01-4-2004-W1-6 = 2004-W01-6-2004-W1-7 = 2004-W01-7-2004-W1-8 = 2004-W01-7-2004-W1-9 = 2004-W01-7-2004-W20--2 = 2004-W20-1-2004-W20--1 = 2004-W20-1-2004-W20-0 = 2004-W20-1-2004-W20-1 = 2004-W20-1-2004-W20-4 = 2004-W20-4-2004-W20-6 = 2004-W20-6-2004-W20-7 = 2004-W20-7-2004-W20-8 = 2004-W20-7-2004-W20-9 = 2004-W20-7-2004-W51--2 = 2004-W51-1-2004-W51--1 = 2004-W51-1-2004-W51-0 = 2004-W51-1-2004-W51-1 = 2004-W51-1-2004-W51-4 = 2004-W51-4-2004-W51-6 = 2004-W51-6-2004-W51-7 = 2004-W51-7-2004-W51-8 = 2004-W51-7-2004-W51-9 = 2004-W51-7-2004-W52--2 = 2004-W52-1-2004-W52--1 = 2004-W52-1-2004-W52-0 = 2004-W52-1-2004-W52-1 = 2004-W52-1-2004-W52-4 = 2004-W52-4-2004-W52-6 = 2004-W52-6-2004-W52-7 = 2004-W52-7-2004-W52-8 = 2004-W52-7-2004-W52-9 = 2004-W52-7-2004-W53--2 = 2004-W53-1-2004-W53--1 = 2004-W53-1-2004-W53-0 = 2004-W53-1-2004-W53-1 = 2004-W53-1-2004-W53-4 = 2004-W53-4-2004-W53-6 = 2004-W53-6-2004-W53-7 = 2004-W53-7-2004-W53-8 = 2004-W53-7-2004-W53-9 = 2004-W53-7-2004-W54--2 = 2004-W53-1-2004-W54--1 = 2004-W53-1-2004-W54-0 = 2004-W53-1-2004-W54-1 = 2004-W53-1-2004-W54-4 = 2004-W53-4-2004-W54-6 = 2004-W53-6-2004-W54-7 = 2004-W53-7-2004-W54-8 = 2004-W53-7-2004-W54-9 = 2004-W53-7
− test/ConvertBack.hs
@@ -1,36 +0,0 @@-{-# OPTIONS -Wall -Werror #-}--module Main where--import Data.Time.Calendar.OrdinalDate-import Data.Time.Calendar.Julian-import Data.Time.Calendar.WeekDate-import Data.Time.Calendar--checkDay :: (Show t) => (Day -> t) -> (t -> Day) -> (t -> Maybe Day) -> Day -> IO ()-checkDay encodeDay decodeDay decodeDayValid day = do- let st = encodeDay day- let day' = decodeDay st- if day /= day'- then putStrLn ((show day) ++ " -> " ++ (show st) ++ " -> " ++ (show day') ++ " (diff " ++ (show (diffDays day' day)) ++ ")")- else return ()- let mday' = decodeDayValid st- if Just day /= mday'- then putStrLn ((show day) ++ " -> " ++ (show st) ++ " -> " ++ (show mday'))- else return ()- --checkers :: [Day -> IO ()]-checkers = [- checkDay toOrdinalDate (\(y,d) -> fromOrdinalDate y d) (\(y,d) -> fromOrdinalDateValid y d),- checkDay toWeekDate (\(y,w,d) -> fromWeekDate y w d) (\(y,w,d) -> fromWeekDateValid y w d),- checkDay toGregorian (\(y,m,d) -> fromGregorian y m d) (\(y,m,d) -> fromGregorianValid y m d),- checkDay toJulian (\(y,m,d) -> fromJulian y m d) (\(y,m,d) -> fromJulianValid y m d)- ]--days :: [Day]-days = [ModifiedJulianDay 50000 .. ModifiedJulianDay 50200] ++- (fmap (\year -> (fromGregorian year 1 4)) [1980..2000])--main :: IO ()-main = mapM_ (\ch -> mapM_ ch days) checkers
− test/CurrentTime.hs
@@ -1,13 +0,0 @@-{-# OPTIONS -Wall -Werror #-}--module Main where--import Data.Time--main :: IO ()-main = do- now <- getCurrentTime- putStrLn (show (utctDay now) ++ "," ++ show (utctDayTime now))- putStrLn (show (utcToZonedTime utc now :: ZonedTime))- myzone <- getCurrentTimeZone- putStrLn (show (utcToZonedTime myzone now :: ZonedTime))
− test/LongWeekYears.hs
@@ -1,18 +0,0 @@-{-# OPTIONS -Wall -Werror #-}--module Main where--import Data.Time.Calendar.WeekDate-import Data.Time.Calendar--longYear :: Integer -> Bool-longYear year = case toWeekDate (fromGregorian year 12 31) of- (_,53,_) -> True- _ -> False--showLongYear :: Integer -> IO ()-showLongYear year = putStrLn ((show year) ++ ": " ++ (if isLeapYear year then "L" else " ") ++ (if longYear year then "*" else " "))--main :: IO ()-main = do- mapM_ showLongYear [1901 .. 2050]
− test/LongWeekYears.ref
@@ -1,150 +0,0 @@-1901: -1902: -1903: *-1904: L -1905: -1906: -1907: -1908: L*-1909: -1910: -1911: -1912: L -1913: -1914: *-1915: -1916: L -1917: -1918: -1919: -1920: L*-1921: -1922: -1923: -1924: L -1925: *-1926: -1927: -1928: L -1929: -1930: -1931: *-1932: L -1933: -1934: -1935: -1936: L*-1937: -1938: -1939: -1940: L -1941: -1942: *-1943: -1944: L -1945: -1946: -1947: -1948: L*-1949: -1950: -1951: -1952: L -1953: *-1954: -1955: -1956: L -1957: -1958: -1959: *-1960: L -1961: -1962: -1963: -1964: L*-1965: -1966: -1967: -1968: L -1969: -1970: *-1971: -1972: L -1973: -1974: -1975: -1976: L*-1977: -1978: -1979: -1980: L -1981: *-1982: -1983: -1984: L -1985: -1986: -1987: *-1988: L -1989: -1990: -1991: -1992: L*-1993: -1994: -1995: -1996: L -1997: -1998: *-1999: -2000: L -2001: -2002: -2003: -2004: L*-2005: -2006: -2007: -2008: L -2009: *-2010: -2011: -2012: L -2013: -2014: -2015: *-2016: L -2017: -2018: -2019: -2020: L*-2021: -2022: -2023: -2024: L -2025: -2026: *-2027: -2028: L -2029: -2030: -2031: -2032: L*-2033: -2034: -2035: -2036: L -2037: *-2038: -2039: -2040: L -2041: -2042: -2043: *-2044: L -2045: -2046: -2047: -2048: L*-2049: -2050:
− test/Makefile
@@ -1,105 +0,0 @@-GHC = ghc-GHCFLAGS = -package time -package QuickCheck-1.2.0.1--default:- make CurrentTime.run ShowDST.run test--TestMonthDay: TestMonthDay.o- $(GHC) $(GHCFLAGS) $^ -o $@--ConvertBack: ConvertBack.o- $(GHC) $(GHCFLAGS) $^ -o $@--TestCalendars: TestCalendars.o- $(GHC) $(GHCFLAGS) $^ -o $@--TestTime: TestTime.o- $(GHC) $(GHCFLAGS) $^ -o $@--LongWeekYears: LongWeekYears.o- $(GHC) $(GHCFLAGS) $^ -o $@--ClipDates: ClipDates.o- $(GHC) $(GHCFLAGS) $^ -o $@--AddDays: AddDays.o- $(GHC) $(GHCFLAGS) $^ -o $@--TestFormat: TestFormat.o TestFormatStuff.o- $(GHC) $(GHCFLAGS) $^ -o $@--TestFormatStuff.o: TestFormatStuff.c TestFormatStuff.h- gcc -o $@ -c $<--TestParseDAT: TestParseDAT.o- $(GHC) $(GHCFLAGS) $^ -o $@--TestEaster: TestEaster.o- $(GHC) $(GHCFLAGS) $^ -o $@--CurrentTime: CurrentTime.o- $(GHC) $(GHCFLAGS) $^ -o $@--ShowDST: ShowDST.o- $(GHC) $(GHCFLAGS) $^ -o $@--TimeZone: TimeZone.o- $(GHC) $(GHCFLAGS) $^ -o $@--TimeZone.ref: FORCE- date +%z > $@--TestParseTime: TestParseTime.o- $(GHC) $(GHCFLAGS) $^ -o $@--RealToFracBenchmark: RealToFracBenchmark.o- $(GHC) $(GHCFLAGS) $^ -o $@--test: \- TestMonthDay.diff \- ConvertBack.diff0 \- TestCalendars.diff \- TestTime.diff \- LongWeekYears.diff \- ClipDates.diff \- AddDays.diff \- TimeZone.diff \- TestFormat.diff0 \- TestParseDAT.diff \- TestEaster.diff \- TestParseTime.run \- UseCases.o \- RealToFracBenchmark.run- @echo "Success!"--clean:- rm -rf TestMonthDay ConvertBack TestCalendars TestTime LongWeekYears ClipDates \- AddDays TestFormat TestParseDAT TestEaster CurrentTime ShowDST TimeZone TimeZone.ref TestParseTime RealToFracBenchmark \- *.out *.run *.o *.hi Makefile.bak--%.diff: %.ref %.out- diff -u $^--%.diff0: %.out- diff -u /dev/null $^--%.out: %- ./$< > $@--%.run: %- ./$<- touch $@--%.hi: %.o- @:--%.o: %.hs- $(GHC) $(GHCFLAGS) -c $< -o $@--%.o: %.lhs- $(GHC) $(GHCFLAGS) -c $< -o $@--FORCE:--.SECONDARY:-
− test/RealToFracBenchmark.hs
@@ -1,22 +0,0 @@-{- Contributed by Liyang HU <haskell.org@liyang.hu> -}-module Main where--import Prelude-import Control.Applicative-import Control.Monad-import Control.DeepSeq-import Data.Time-import Data.Time.Clock.POSIX-import System.Random--main :: IO ()-main = do- ts <- replicateM 100000 $ do- t <- posixSecondsToUTCTime . realToFrac <$>- ( (*) . fromInteger <$> randomRIO (-15*10^21, 15*10^21) <*>- randomIO :: IO Double ) :: IO UTCTime- rnf t `seq` return t- now <- getCurrentTime- print . sum $ map (diffUTCTime now) ts- print =<< flip diffUTCTime now <$> getCurrentTime-
− test/ShowDST.hs
@@ -1,43 +0,0 @@-{-# OPTIONS -Wall -Werror #-}--module Main where--import Data.Time--monthBeginning :: TimeZone -> Integer -> Int -> UTCTime-monthBeginning zone year month = localTimeToUTC zone- (LocalTime (fromGregorian year month 1) midnight)--findTransition :: UTCTime -> UTCTime -> IO [(UTCTime,TimeZone,TimeZone)]-findTransition a b = do- za <- getTimeZone a- zb <- getTimeZone b- if za == zb then return [] else do- let c = addUTCTime ((diffUTCTime b a) / 2) a- if a == c then return [(b,za,zb)] else do- tp <- findTransition a c- tq <- findTransition c b- return (tp ++ tq)--showZoneTime :: TimeZone -> UTCTime -> String-showZoneTime zone time = show (utcToZonedTime zone time)--showTransition :: (UTCTime,TimeZone,TimeZone) -> String-showTransition (time,zone1,zone2) = (showZoneTime zone1 time) ++ " => " ++ (showZoneTime zone2 time)--main :: IO ()-main = do- now <- getCurrentTime- zone <- getTimeZone now- let (year,_,_) = toGregorian (localDay (utcToLocalTime zone now))- putStrLn ("DST adjustments for " ++ show year ++ ":")- let t0 = monthBeginning zone year 1- let t1 = monthBeginning zone year 4- let t2 = monthBeginning zone year 7- let t3 = monthBeginning zone year 10- let t4 = monthBeginning zone (year + 1) 1- tr1 <- findTransition t0 t1- tr2 <- findTransition t1 t2- tr3 <- findTransition t2 t3- tr4 <- findTransition t3 t4- mapM_ (putStrLn . showTransition) (tr1 ++ tr2 ++ tr3 ++ tr4)
− test/TestCalendars.hs
@@ -1,29 +0,0 @@-{-# OPTIONS -Wall -Werror #-}--module Main where--import Data.Time.Calendar.Julian-import Data.Time.Calendar.WeekDate-import Data.Time.Calendar--showers :: [(String,Day -> String)]-showers = [- ("MJD",show . toModifiedJulianDay),- ("Gregorian",showGregorian),- ("Julian",showJulian),- ("ISO 8601",showWeekDate)- ]--days :: [Day]-days = [- fromGregorian 0 12 31,- fromJulian 1752 9 2,- fromGregorian 1752 9 14,- fromGregorian 2005 1 23- ]--main :: IO ()-main = mapM_ (\day -> do- mapM_ (\(name,shower) -> putStr (" == " ++ name ++ " " ++ (shower day))) showers- putStrLn ""- ) days
− test/TestCalendars.ref
@@ -1,4 +0,0 @@- == MJD -678576 == Gregorian 0000-12-31 == Julian 0001-01-02 == ISO 8601 0000-W52-7- == MJD -38780 == Gregorian 1752-09-13 == Julian 1752-09-02 == ISO 8601 1752-W37-3- == MJD -38779 == Gregorian 1752-09-14 == Julian 1752-09-03 == ISO 8601 1752-W37-4- == MJD 53393 == Gregorian 2005-01-23 == Julian 2005-01-10 == ISO 8601 2005-W03-7
− test/TestEaster.hs
@@ -1,23 +0,0 @@-{-# OPTIONS -Wall -Werror #-}--module Main where--import Data.Time.Calendar.Easter-import Data.Time.Calendar-import Data.Time.Format--import System.Locale--days :: [Day]-days = [ModifiedJulianDay 53000 .. ModifiedJulianDay 53014]--showWithWDay :: Day -> String-showWithWDay = formatTime defaultTimeLocale "%F %A"--main :: IO ()-main = do- mapM_ (\day -> putStrLn ((showWithWDay day) ++ " -> " ++ (showWithWDay (sundayAfter day)))) days- mapM_ (\year -> do- putStrLn ((show year) ++ ", Gregorian: moon, " ++ (show (gregorianPaschalMoon year)) ++ ": Easter, " ++ (showWithWDay (gregorianEaster year)))- putStrLn ((show year) ++ ", Orthodox : moon, " ++ (show (orthodoxPaschalMoon year)) ++ ": Easter, " ++ (showWithWDay (orthodoxEaster year)))- ) [2000..2020]
− test/TestEaster.ref
@@ -1,57 +0,0 @@-2003-12-27 Saturday -> 2003-12-28 Sunday-2003-12-28 Sunday -> 2004-01-04 Sunday-2003-12-29 Monday -> 2004-01-04 Sunday-2003-12-30 Tuesday -> 2004-01-04 Sunday-2003-12-31 Wednesday -> 2004-01-04 Sunday-2004-01-01 Thursday -> 2004-01-04 Sunday-2004-01-02 Friday -> 2004-01-04 Sunday-2004-01-03 Saturday -> 2004-01-04 Sunday-2004-01-04 Sunday -> 2004-01-11 Sunday-2004-01-05 Monday -> 2004-01-11 Sunday-2004-01-06 Tuesday -> 2004-01-11 Sunday-2004-01-07 Wednesday -> 2004-01-11 Sunday-2004-01-08 Thursday -> 2004-01-11 Sunday-2004-01-09 Friday -> 2004-01-11 Sunday-2004-01-10 Saturday -> 2004-01-11 Sunday-2000, Gregorian: moon, 2000-04-18: Easter, 2000-04-23 Sunday-2000, Orthodox : moon, 2000-04-23: Easter, 2000-04-30 Sunday-2001, Gregorian: moon, 2001-04-08: Easter, 2001-04-15 Sunday-2001, Orthodox : moon, 2001-04-12: Easter, 2001-04-15 Sunday-2002, Gregorian: moon, 2002-03-28: Easter, 2002-03-31 Sunday-2002, Orthodox : moon, 2002-05-01: Easter, 2002-05-05 Sunday-2003, Gregorian: moon, 2003-04-16: Easter, 2003-04-20 Sunday-2003, Orthodox : moon, 2003-04-20: Easter, 2003-04-27 Sunday-2004, Gregorian: moon, 2004-04-05: Easter, 2004-04-11 Sunday-2004, Orthodox : moon, 2004-04-09: Easter, 2004-04-11 Sunday-2005, Gregorian: moon, 2005-03-25: Easter, 2005-03-27 Sunday-2005, Orthodox : moon, 2005-04-28: Easter, 2005-05-01 Sunday-2006, Gregorian: moon, 2006-04-13: Easter, 2006-04-16 Sunday-2006, Orthodox : moon, 2006-04-17: Easter, 2006-04-23 Sunday-2007, Gregorian: moon, 2007-04-02: Easter, 2007-04-08 Sunday-2007, Orthodox : moon, 2007-04-06: Easter, 2007-04-08 Sunday-2008, Gregorian: moon, 2008-03-22: Easter, 2008-03-23 Sunday-2008, Orthodox : moon, 2008-04-25: Easter, 2008-04-27 Sunday-2009, Gregorian: moon, 2009-04-10: Easter, 2009-04-12 Sunday-2009, Orthodox : moon, 2009-04-14: Easter, 2009-04-19 Sunday-2010, Gregorian: moon, 2010-03-30: Easter, 2010-04-04 Sunday-2010, Orthodox : moon, 2010-04-03: Easter, 2010-04-04 Sunday-2011, Gregorian: moon, 2011-04-18: Easter, 2011-04-24 Sunday-2011, Orthodox : moon, 2011-04-22: Easter, 2011-04-24 Sunday-2012, Gregorian: moon, 2012-04-07: Easter, 2012-04-08 Sunday-2012, Orthodox : moon, 2012-04-11: Easter, 2012-04-15 Sunday-2013, Gregorian: moon, 2013-03-27: Easter, 2013-03-31 Sunday-2013, Orthodox : moon, 2013-04-30: Easter, 2013-05-05 Sunday-2014, Gregorian: moon, 2014-04-14: Easter, 2014-04-20 Sunday-2014, Orthodox : moon, 2014-04-18: Easter, 2014-04-20 Sunday-2015, Gregorian: moon, 2015-04-03: Easter, 2015-04-05 Sunday-2015, Orthodox : moon, 2015-04-07: Easter, 2015-04-12 Sunday-2016, Gregorian: moon, 2016-03-23: Easter, 2016-03-27 Sunday-2016, Orthodox : moon, 2016-04-26: Easter, 2016-05-01 Sunday-2017, Gregorian: moon, 2017-04-11: Easter, 2017-04-16 Sunday-2017, Orthodox : moon, 2017-04-15: Easter, 2017-04-16 Sunday-2018, Gregorian: moon, 2018-03-31: Easter, 2018-04-01 Sunday-2018, Orthodox : moon, 2018-04-04: Easter, 2018-04-08 Sunday-2019, Gregorian: moon, 2019-04-18: Easter, 2019-04-21 Sunday-2019, Orthodox : moon, 2019-04-23: Easter, 2019-04-28 Sunday-2020, Gregorian: moon, 2020-04-08: Easter, 2020-04-12 Sunday-2020, Orthodox : moon, 2020-04-12: Easter, 2020-04-19 Sunday
− test/TestFormat.hs
@@ -1,159 +0,0 @@-{-# OPTIONS -XForeignFunctionInterface -Wall -Werror #-}--module Main where--import Data.Time-import Data.Time.Clock.POSIX-import Data.Char--import System.Locale-import Foreign-import Foreign.C-import Control.Exception;--{-- size_t format_time (- char *s, size_t maxsize,- const char *format,- int isdst,int gmtoff,time_t t);--}--foreign import ccall unsafe "TestFormatStuff.h format_time" format_time :: CString -> CSize -> CString -> CInt -> CInt -> CString -> CTime -> IO CSize--withBuffer :: Int -> (CString -> IO CSize) -> IO String-withBuffer n f = withArray (replicate n 0) (\buffer -> do- len <- f buffer- peekCStringLen (buffer,fromIntegral len)- )--unixFormatTime :: String -> TimeZone -> UTCTime -> IO String-unixFormatTime fmt zone time = withCString fmt (\pfmt -> withCString (timeZoneName zone) (\pzonename ->- withBuffer 100 (\buffer -> format_time buffer 100 pfmt- (if timeZoneSummerOnly zone then 1 else 0)- (fromIntegral (timeZoneMinutes zone * 60))- pzonename- (fromInteger (truncate (utcTimeToPOSIXSeconds time)))- )- ))--locale :: TimeLocale-locale = defaultTimeLocale {dateTimeFmt = "%a %b %e %H:%M:%S %Y"}--zones :: [TimeZone]-zones = [utc,TimeZone 87 True "Fenwickian Daylight Time"]--baseTime0 :: UTCTime-baseTime0 = localTimeToUTC utc (LocalTime (fromGregorian 1970 01 01) midnight)--baseTime1 :: UTCTime-baseTime1 = localTimeToUTC utc (LocalTime (fromGregorian 2000 01 01) midnight)--getDay :: Integer -> UTCTime-getDay day = addUTCTime ((fromInteger day) * posixDayLength) baseTime1--getYearP1 :: Integer -> UTCTime-getYearP1 year = localTimeToUTC utc (LocalTime (fromGregorian year 01 01) midnight)--getYearP2 :: Integer -> UTCTime-getYearP2 year = localTimeToUTC utc (LocalTime (fromGregorian year 02 04) midnight)--getYearP3 :: Integer -> UTCTime-getYearP3 year = localTimeToUTC utc (LocalTime (fromGregorian year 03 04) midnight)--getYearP4 :: Integer -> UTCTime-getYearP4 year = localTimeToUTC utc (LocalTime (fromGregorian year 12 31) midnight)--times :: [UTCTime]-times = [baseTime0] ++ (fmap getDay [0..23]) ++ (fmap getDay [0..100]) ++- (fmap getYearP1 [1980..2000]) ++ (fmap getYearP2 [1980..2000]) ++ (fmap getYearP3 [1980..2000]) ++ (fmap getYearP4 [1980..2000])--compareFormat :: (String -> String) -> String -> TimeZone -> UTCTime -> IO ()-compareFormat modUnix fmt zone time = let- ctime = utcToZonedTime zone time- haskellText = formatTime locale fmt ctime- in do- unixText <- fmap modUnix (unixFormatTime fmt zone time)- if haskellText == unixText then return () else- putStrLn ("Mismatch with " ++ fmt ++ " for " ++ (show ctime) ++ ": UNIX=\"" ++ unixText ++ "\", TimeLib=\"" ++ haskellText ++ "\".")---- as found in http://www.opengroup.org/onlinepubs/007908799/xsh/strftime.html--- plus FgGklz--- P not always supported--- s time-zone dependent-chars :: [Char]-chars = "aAbBcCdDeFgGhHIjklmMnprRStTuUVwWxXyYzZ%"---- as found in "man strftime" on a glibc system. '#' is different, though-modifiers :: [Char]-modifiers = "_-0^"--formats :: [String]-formats = ["%G-W%V-%u","%U-%w","%W-%u"] ++ (fmap (\char -> '%':char:[]) chars)- ++ (concat (fmap (\char -> fmap (\modifier -> '%':modifier:char:[]) modifiers) chars))--hashformats :: [String]-hashformats = (fmap (\char -> '%':'#':char:[]) chars)--somestrings :: [String]-somestrings = ["", " ", "-", "\n"]--getBottom :: a -> IO (Maybe Control.Exception.SomeException);-getBottom a = Control.Exception.catch (seq a (return Nothing)) (return . Just); --safeString :: String -> IO String-safeString s = do- msx <- getBottom s- case msx of- Just sx -> return (show sx)- Nothing -> case s of- (c:cc) -> do- mcx <- getBottom c- case mcx of- Just cx -> return (show cx)- Nothing -> do- ss <- safeString cc- return (c:ss)- [] -> return ""--compareExpected :: (Eq t,Show t,ParseTime t) => String -> String -> String -> Maybe t -> IO ()-compareExpected ts fmt str expected = let- found = parseTime defaultTimeLocale fmt str- in do- mex <- getBottom found- case mex of- Just ex -> putStrLn ("Exception with " ++ fmt ++ " for " ++ ts ++" " ++ (show str) ++ ": expected " ++ (show expected) ++ ", caught " ++ (show ex))- Nothing -> if found == expected- then return ()- else do- sf <- safeString (show found)- putStrLn ("Mismatch with " ++ fmt ++ " for " ++ ts ++" " ++ (show str) ++ ": expected " ++ (show expected) ++ ", found " ++ sf)--class (ParseTime t) => TestParse t where- expectedParse :: String -> String -> Maybe t- expectedParse "%Z" str | all isSpace str = Just (buildTime defaultTimeLocale [])- expectedParse "%_Z" str | all isSpace str = Just (buildTime defaultTimeLocale [])- expectedParse "%-Z" str | all isSpace str = Just (buildTime defaultTimeLocale [])- expectedParse "%0Z" str | all isSpace str = Just (buildTime defaultTimeLocale [])- expectedParse _ _ = Nothing--instance TestParse Day-instance TestParse TimeOfDay-instance TestParse LocalTime-instance TestParse TimeZone-instance TestParse ZonedTime-instance TestParse UTCTime--checkParse :: String -> String -> IO ()-checkParse fmt str = do- compareExpected "Day" fmt str (expectedParse fmt str :: Maybe Day)- compareExpected "TimeOfDay" fmt str (expectedParse fmt str :: Maybe TimeOfDay)- compareExpected "LocalTime" fmt str (expectedParse fmt str :: Maybe LocalTime)- compareExpected "TimeZone" fmt str (expectedParse fmt str :: Maybe TimeZone)- compareExpected "UTCTime" fmt str (expectedParse fmt str :: Maybe UTCTime)--main :: IO ()-main = do- mapM_ (\fmt -> mapM_ (checkParse fmt) somestrings) formats- mapM_ (\fmt -> mapM_ (\time -> mapM_ (\zone -> compareFormat id fmt zone time) zones) times) formats- mapM_ (\fmt -> mapM_ (\time -> mapM_ (\zone -> compareFormat (fmap toLower) fmt zone time) zones) times) hashformats-
− test/TestFormatStuff.c
@@ -1,15 +0,0 @@-#include "TestFormatStuff.h"--size_t format_time (- char* buffer, size_t maxsize,- const char* format,- int isdst,int gmtoff,char* zonename,time_t t)-{- t += gmtoff;- struct tm tmd;- gmtime_r(&t,&tmd);- tmd.tm_isdst = isdst;- tmd.tm_gmtoff = gmtoff;- tmd.tm_zone = zonename;- return strftime(buffer,maxsize,format,&tmd);-}
− test/TestFormatStuff.h
@@ -1,6 +0,0 @@-#include <time.h>--size_t format_time (- char *s, size_t maxsize,- const char *format,- int isdst,int gmtoff,char* zonename,time_t t);
− test/TestMonthDay.hs
@@ -1,20 +0,0 @@-{-# OPTIONS -Wall -Werror #-}--module Main where--import Data.Time.Calendar.MonthDay--showCompare :: (Eq a,Show a) => a -> String -> a -> String-showCompare a1 b a2 | a1 == a2 = (show a1) ++ " == " ++ b-showCompare a1 b a2 = "DIFF: " ++ (show a1) ++ " -> " ++ b ++ " -> " ++ (show a2)--main :: IO ()-main = mapM_ (\isLeap -> do- putStrLn (if isLeap then "Leap:" else "Regular:")- mapM_ (\yd -> do- let (m,d) = dayOfYearToMonthAndDay isLeap yd- let yd' = monthAndDayToDayOfYear isLeap m d- let mdtext = (show m) ++ "-" ++ (show d)- putStrLn (showCompare yd mdtext yd')- ) [-2..369]- ) [False,True]
− test/TestMonthDay.ref
@@ -1,746 +0,0 @@-Regular:-DIFF: -2 -> 1-1 -> 1-DIFF: -1 -> 1-1 -> 1-DIFF: 0 -> 1-1 -> 1-1 == 1-1-2 == 1-2-3 == 1-3-4 == 1-4-5 == 1-5-6 == 1-6-7 == 1-7-8 == 1-8-9 == 1-9-10 == 1-10-11 == 1-11-12 == 1-12-13 == 1-13-14 == 1-14-15 == 1-15-16 == 1-16-17 == 1-17-18 == 1-18-19 == 1-19-20 == 1-20-21 == 1-21-22 == 1-22-23 == 1-23-24 == 1-24-25 == 1-25-26 == 1-26-27 == 1-27-28 == 1-28-29 == 1-29-30 == 1-30-31 == 1-31-32 == 2-1-33 == 2-2-34 == 2-3-35 == 2-4-36 == 2-5-37 == 2-6-38 == 2-7-39 == 2-8-40 == 2-9-41 == 2-10-42 == 2-11-43 == 2-12-44 == 2-13-45 == 2-14-46 == 2-15-47 == 2-16-48 == 2-17-49 == 2-18-50 == 2-19-51 == 2-20-52 == 2-21-53 == 2-22-54 == 2-23-55 == 2-24-56 == 2-25-57 == 2-26-58 == 2-27-59 == 2-28-60 == 3-1-61 == 3-2-62 == 3-3-63 == 3-4-64 == 3-5-65 == 3-6-66 == 3-7-67 == 3-8-68 == 3-9-69 == 3-10-70 == 3-11-71 == 3-12-72 == 3-13-73 == 3-14-74 == 3-15-75 == 3-16-76 == 3-17-77 == 3-18-78 == 3-19-79 == 3-20-80 == 3-21-81 == 3-22-82 == 3-23-83 == 3-24-84 == 3-25-85 == 3-26-86 == 3-27-87 == 3-28-88 == 3-29-89 == 3-30-90 == 3-31-91 == 4-1-92 == 4-2-93 == 4-3-94 == 4-4-95 == 4-5-96 == 4-6-97 == 4-7-98 == 4-8-99 == 4-9-100 == 4-10-101 == 4-11-102 == 4-12-103 == 4-13-104 == 4-14-105 == 4-15-106 == 4-16-107 == 4-17-108 == 4-18-109 == 4-19-110 == 4-20-111 == 4-21-112 == 4-22-113 == 4-23-114 == 4-24-115 == 4-25-116 == 4-26-117 == 4-27-118 == 4-28-119 == 4-29-120 == 4-30-121 == 5-1-122 == 5-2-123 == 5-3-124 == 5-4-125 == 5-5-126 == 5-6-127 == 5-7-128 == 5-8-129 == 5-9-130 == 5-10-131 == 5-11-132 == 5-12-133 == 5-13-134 == 5-14-135 == 5-15-136 == 5-16-137 == 5-17-138 == 5-18-139 == 5-19-140 == 5-20-141 == 5-21-142 == 5-22-143 == 5-23-144 == 5-24-145 == 5-25-146 == 5-26-147 == 5-27-148 == 5-28-149 == 5-29-150 == 5-30-151 == 5-31-152 == 6-1-153 == 6-2-154 == 6-3-155 == 6-4-156 == 6-5-157 == 6-6-158 == 6-7-159 == 6-8-160 == 6-9-161 == 6-10-162 == 6-11-163 == 6-12-164 == 6-13-165 == 6-14-166 == 6-15-167 == 6-16-168 == 6-17-169 == 6-18-170 == 6-19-171 == 6-20-172 == 6-21-173 == 6-22-174 == 6-23-175 == 6-24-176 == 6-25-177 == 6-26-178 == 6-27-179 == 6-28-180 == 6-29-181 == 6-30-182 == 7-1-183 == 7-2-184 == 7-3-185 == 7-4-186 == 7-5-187 == 7-6-188 == 7-7-189 == 7-8-190 == 7-9-191 == 7-10-192 == 7-11-193 == 7-12-194 == 7-13-195 == 7-14-196 == 7-15-197 == 7-16-198 == 7-17-199 == 7-18-200 == 7-19-201 == 7-20-202 == 7-21-203 == 7-22-204 == 7-23-205 == 7-24-206 == 7-25-207 == 7-26-208 == 7-27-209 == 7-28-210 == 7-29-211 == 7-30-212 == 7-31-213 == 8-1-214 == 8-2-215 == 8-3-216 == 8-4-217 == 8-5-218 == 8-6-219 == 8-7-220 == 8-8-221 == 8-9-222 == 8-10-223 == 8-11-224 == 8-12-225 == 8-13-226 == 8-14-227 == 8-15-228 == 8-16-229 == 8-17-230 == 8-18-231 == 8-19-232 == 8-20-233 == 8-21-234 == 8-22-235 == 8-23-236 == 8-24-237 == 8-25-238 == 8-26-239 == 8-27-240 == 8-28-241 == 8-29-242 == 8-30-243 == 8-31-244 == 9-1-245 == 9-2-246 == 9-3-247 == 9-4-248 == 9-5-249 == 9-6-250 == 9-7-251 == 9-8-252 == 9-9-253 == 9-10-254 == 9-11-255 == 9-12-256 == 9-13-257 == 9-14-258 == 9-15-259 == 9-16-260 == 9-17-261 == 9-18-262 == 9-19-263 == 9-20-264 == 9-21-265 == 9-22-266 == 9-23-267 == 9-24-268 == 9-25-269 == 9-26-270 == 9-27-271 == 9-28-272 == 9-29-273 == 9-30-274 == 10-1-275 == 10-2-276 == 10-3-277 == 10-4-278 == 10-5-279 == 10-6-280 == 10-7-281 == 10-8-282 == 10-9-283 == 10-10-284 == 10-11-285 == 10-12-286 == 10-13-287 == 10-14-288 == 10-15-289 == 10-16-290 == 10-17-291 == 10-18-292 == 10-19-293 == 10-20-294 == 10-21-295 == 10-22-296 == 10-23-297 == 10-24-298 == 10-25-299 == 10-26-300 == 10-27-301 == 10-28-302 == 10-29-303 == 10-30-304 == 10-31-305 == 11-1-306 == 11-2-307 == 11-3-308 == 11-4-309 == 11-5-310 == 11-6-311 == 11-7-312 == 11-8-313 == 11-9-314 == 11-10-315 == 11-11-316 == 11-12-317 == 11-13-318 == 11-14-319 == 11-15-320 == 11-16-321 == 11-17-322 == 11-18-323 == 11-19-324 == 11-20-325 == 11-21-326 == 11-22-327 == 11-23-328 == 11-24-329 == 11-25-330 == 11-26-331 == 11-27-332 == 11-28-333 == 11-29-334 == 11-30-335 == 12-1-336 == 12-2-337 == 12-3-338 == 12-4-339 == 12-5-340 == 12-6-341 == 12-7-342 == 12-8-343 == 12-9-344 == 12-10-345 == 12-11-346 == 12-12-347 == 12-13-348 == 12-14-349 == 12-15-350 == 12-16-351 == 12-17-352 == 12-18-353 == 12-19-354 == 12-20-355 == 12-21-356 == 12-22-357 == 12-23-358 == 12-24-359 == 12-25-360 == 12-26-361 == 12-27-362 == 12-28-363 == 12-29-364 == 12-30-365 == 12-31-DIFF: 366 -> 12-31 -> 365-DIFF: 367 -> 12-31 -> 365-DIFF: 368 -> 12-31 -> 365-DIFF: 369 -> 12-31 -> 365-Leap:-DIFF: -2 -> 1-1 -> 1-DIFF: -1 -> 1-1 -> 1-DIFF: 0 -> 1-1 -> 1-1 == 1-1-2 == 1-2-3 == 1-3-4 == 1-4-5 == 1-5-6 == 1-6-7 == 1-7-8 == 1-8-9 == 1-9-10 == 1-10-11 == 1-11-12 == 1-12-13 == 1-13-14 == 1-14-15 == 1-15-16 == 1-16-17 == 1-17-18 == 1-18-19 == 1-19-20 == 1-20-21 == 1-21-22 == 1-22-23 == 1-23-24 == 1-24-25 == 1-25-26 == 1-26-27 == 1-27-28 == 1-28-29 == 1-29-30 == 1-30-31 == 1-31-32 == 2-1-33 == 2-2-34 == 2-3-35 == 2-4-36 == 2-5-37 == 2-6-38 == 2-7-39 == 2-8-40 == 2-9-41 == 2-10-42 == 2-11-43 == 2-12-44 == 2-13-45 == 2-14-46 == 2-15-47 == 2-16-48 == 2-17-49 == 2-18-50 == 2-19-51 == 2-20-52 == 2-21-53 == 2-22-54 == 2-23-55 == 2-24-56 == 2-25-57 == 2-26-58 == 2-27-59 == 2-28-60 == 2-29-61 == 3-1-62 == 3-2-63 == 3-3-64 == 3-4-65 == 3-5-66 == 3-6-67 == 3-7-68 == 3-8-69 == 3-9-70 == 3-10-71 == 3-11-72 == 3-12-73 == 3-13-74 == 3-14-75 == 3-15-76 == 3-16-77 == 3-17-78 == 3-18-79 == 3-19-80 == 3-20-81 == 3-21-82 == 3-22-83 == 3-23-84 == 3-24-85 == 3-25-86 == 3-26-87 == 3-27-88 == 3-28-89 == 3-29-90 == 3-30-91 == 3-31-92 == 4-1-93 == 4-2-94 == 4-3-95 == 4-4-96 == 4-5-97 == 4-6-98 == 4-7-99 == 4-8-100 == 4-9-101 == 4-10-102 == 4-11-103 == 4-12-104 == 4-13-105 == 4-14-106 == 4-15-107 == 4-16-108 == 4-17-109 == 4-18-110 == 4-19-111 == 4-20-112 == 4-21-113 == 4-22-114 == 4-23-115 == 4-24-116 == 4-25-117 == 4-26-118 == 4-27-119 == 4-28-120 == 4-29-121 == 4-30-122 == 5-1-123 == 5-2-124 == 5-3-125 == 5-4-126 == 5-5-127 == 5-6-128 == 5-7-129 == 5-8-130 == 5-9-131 == 5-10-132 == 5-11-133 == 5-12-134 == 5-13-135 == 5-14-136 == 5-15-137 == 5-16-138 == 5-17-139 == 5-18-140 == 5-19-141 == 5-20-142 == 5-21-143 == 5-22-144 == 5-23-145 == 5-24-146 == 5-25-147 == 5-26-148 == 5-27-149 == 5-28-150 == 5-29-151 == 5-30-152 == 5-31-153 == 6-1-154 == 6-2-155 == 6-3-156 == 6-4-157 == 6-5-158 == 6-6-159 == 6-7-160 == 6-8-161 == 6-9-162 == 6-10-163 == 6-11-164 == 6-12-165 == 6-13-166 == 6-14-167 == 6-15-168 == 6-16-169 == 6-17-170 == 6-18-171 == 6-19-172 == 6-20-173 == 6-21-174 == 6-22-175 == 6-23-176 == 6-24-177 == 6-25-178 == 6-26-179 == 6-27-180 == 6-28-181 == 6-29-182 == 6-30-183 == 7-1-184 == 7-2-185 == 7-3-186 == 7-4-187 == 7-5-188 == 7-6-189 == 7-7-190 == 7-8-191 == 7-9-192 == 7-10-193 == 7-11-194 == 7-12-195 == 7-13-196 == 7-14-197 == 7-15-198 == 7-16-199 == 7-17-200 == 7-18-201 == 7-19-202 == 7-20-203 == 7-21-204 == 7-22-205 == 7-23-206 == 7-24-207 == 7-25-208 == 7-26-209 == 7-27-210 == 7-28-211 == 7-29-212 == 7-30-213 == 7-31-214 == 8-1-215 == 8-2-216 == 8-3-217 == 8-4-218 == 8-5-219 == 8-6-220 == 8-7-221 == 8-8-222 == 8-9-223 == 8-10-224 == 8-11-225 == 8-12-226 == 8-13-227 == 8-14-228 == 8-15-229 == 8-16-230 == 8-17-231 == 8-18-232 == 8-19-233 == 8-20-234 == 8-21-235 == 8-22-236 == 8-23-237 == 8-24-238 == 8-25-239 == 8-26-240 == 8-27-241 == 8-28-242 == 8-29-243 == 8-30-244 == 8-31-245 == 9-1-246 == 9-2-247 == 9-3-248 == 9-4-249 == 9-5-250 == 9-6-251 == 9-7-252 == 9-8-253 == 9-9-254 == 9-10-255 == 9-11-256 == 9-12-257 == 9-13-258 == 9-14-259 == 9-15-260 == 9-16-261 == 9-17-262 == 9-18-263 == 9-19-264 == 9-20-265 == 9-21-266 == 9-22-267 == 9-23-268 == 9-24-269 == 9-25-270 == 9-26-271 == 9-27-272 == 9-28-273 == 9-29-274 == 9-30-275 == 10-1-276 == 10-2-277 == 10-3-278 == 10-4-279 == 10-5-280 == 10-6-281 == 10-7-282 == 10-8-283 == 10-9-284 == 10-10-285 == 10-11-286 == 10-12-287 == 10-13-288 == 10-14-289 == 10-15-290 == 10-16-291 == 10-17-292 == 10-18-293 == 10-19-294 == 10-20-295 == 10-21-296 == 10-22-297 == 10-23-298 == 10-24-299 == 10-25-300 == 10-26-301 == 10-27-302 == 10-28-303 == 10-29-304 == 10-30-305 == 10-31-306 == 11-1-307 == 11-2-308 == 11-3-309 == 11-4-310 == 11-5-311 == 11-6-312 == 11-7-313 == 11-8-314 == 11-9-315 == 11-10-316 == 11-11-317 == 11-12-318 == 11-13-319 == 11-14-320 == 11-15-321 == 11-16-322 == 11-17-323 == 11-18-324 == 11-19-325 == 11-20-326 == 11-21-327 == 11-22-328 == 11-23-329 == 11-24-330 == 11-25-331 == 11-26-332 == 11-27-333 == 11-28-334 == 11-29-335 == 11-30-336 == 12-1-337 == 12-2-338 == 12-3-339 == 12-4-340 == 12-5-341 == 12-6-342 == 12-7-343 == 12-8-344 == 12-9-345 == 12-10-346 == 12-11-347 == 12-12-348 == 12-13-349 == 12-14-350 == 12-15-351 == 12-16-352 == 12-17-353 == 12-18-354 == 12-19-355 == 12-20-356 == 12-21-357 == 12-22-358 == 12-23-359 == 12-24-360 == 12-25-361 == 12-26-362 == 12-27-363 == 12-28-364 == 12-29-365 == 12-30-366 == 12-31-DIFF: 367 -> 12-31 -> 366-DIFF: 368 -> 12-31 -> 366-DIFF: 369 -> 12-31 -> 366
− test/TestParseDAT.hs
@@ -1,62 +0,0 @@-{-# OPTIONS -Wall -Werror #-}--module Main where--import Data.Time-import Data.Time.Clock.TAI-import System.IO--hSafeGetContents :: Handle -> IO String-hSafeGetContents h = do- eof <- hIsEOF h- if eof- then return []- else do- c <- hGetChar h- cs <- hSafeGetContents h- return (c:cs)--tods :: [TimeOfDay]-tods = [- TimeOfDay 0 0 0,- TimeOfDay 0 0 0.5,- TimeOfDay 0 0 1,- TimeOfDay 0 0 1.5,- TimeOfDay 0 0 2,- TimeOfDay 23 59 28,- TimeOfDay 23 59 28.5,- TimeOfDay 23 59 29,- TimeOfDay 23 59 29.5,- TimeOfDay 23 59 30,- TimeOfDay 23 59 30.5,- TimeOfDay 23 59 31,- TimeOfDay 23 59 31.5,- TimeOfDay 23 59 32,- TimeOfDay 23 59 59,- TimeOfDay 23 59 59.5,- TimeOfDay 23 59 60,- TimeOfDay 23 59 60.5- ]--times :: [LocalTime]-times =- fmap (LocalTime (fromGregorian 1998 04 02)) tods ++- fmap (LocalTime (fromGregorian 1998 12 30)) tods ++- fmap (LocalTime (fromGregorian 1998 12 31)) tods ++- fmap (LocalTime (fromGregorian 1999 01 01)) tods ++- fmap (LocalTime (fromGregorian 1999 01 02)) tods--main :: IO ()-main = do- h <- openFile "tai-utc.dat" ReadMode- s <- hSafeGetContents h- hClose h- let lst = parseTAIUTCDATFile s- mapM_ (\lt -> do- let utcTime = localTimeToUTC utc lt- let taiTime = utcToTAITime lst utcTime- let utcTime' = taiToUTCTime lst taiTime- if utcTime == utcTime'- then putStrLn ((show utcTime) ++ " == " ++ (show taiTime))- else putStrLn ("correction: " ++ (show utcTime) ++ " -> " ++ (show taiTime) ++ " -> " ++ (show utcTime'))- ) times
− test/TestParseDAT.ref
@@ -1,90 +0,0 @@-1998-04-02 00:00:00 UTC == 1998-04-02 00:00:31 TAI-1998-04-02 00:00:00.5 UTC == 1998-04-02 00:00:31.5 TAI-1998-04-02 00:00:01 UTC == 1998-04-02 00:00:32 TAI-1998-04-02 00:00:01.5 UTC == 1998-04-02 00:00:32.5 TAI-1998-04-02 00:00:02 UTC == 1998-04-02 00:00:33 TAI-1998-04-02 23:59:28 UTC == 1998-04-02 23:59:59 TAI-1998-04-02 23:59:28.5 UTC == 1998-04-02 23:59:59.5 TAI-1998-04-02 23:59:29 UTC == 1998-04-03 00:00:00 TAI-1998-04-02 23:59:29.5 UTC == 1998-04-03 00:00:00.5 TAI-1998-04-02 23:59:30 UTC == 1998-04-03 00:00:01 TAI-1998-04-02 23:59:30.5 UTC == 1998-04-03 00:00:01.5 TAI-1998-04-02 23:59:31 UTC == 1998-04-03 00:00:02 TAI-1998-04-02 23:59:31.5 UTC == 1998-04-03 00:00:02.5 TAI-1998-04-02 23:59:32 UTC == 1998-04-03 00:00:03 TAI-1998-04-02 23:59:59 UTC == 1998-04-03 00:00:30 TAI-1998-04-02 23:59:59.5 UTC == 1998-04-03 00:00:30.5 TAI-correction: 1998-04-02 23:59:60 UTC -> 1998-04-03 00:00:31 TAI -> 1998-04-03 00:00:00 UTC-correction: 1998-04-02 23:59:60.5 UTC -> 1998-04-03 00:00:31.5 TAI -> 1998-04-03 00:00:00.5 UTC-1998-12-30 00:00:00 UTC == 1998-12-30 00:00:31 TAI-1998-12-30 00:00:00.5 UTC == 1998-12-30 00:00:31.5 TAI-1998-12-30 00:00:01 UTC == 1998-12-30 00:00:32 TAI-1998-12-30 00:00:01.5 UTC == 1998-12-30 00:00:32.5 TAI-1998-12-30 00:00:02 UTC == 1998-12-30 00:00:33 TAI-1998-12-30 23:59:28 UTC == 1998-12-30 23:59:59 TAI-1998-12-30 23:59:28.5 UTC == 1998-12-30 23:59:59.5 TAI-1998-12-30 23:59:29 UTC == 1998-12-31 00:00:00 TAI-1998-12-30 23:59:29.5 UTC == 1998-12-31 00:00:00.5 TAI-1998-12-30 23:59:30 UTC == 1998-12-31 00:00:01 TAI-1998-12-30 23:59:30.5 UTC == 1998-12-31 00:00:01.5 TAI-1998-12-30 23:59:31 UTC == 1998-12-31 00:00:02 TAI-1998-12-30 23:59:31.5 UTC == 1998-12-31 00:00:02.5 TAI-1998-12-30 23:59:32 UTC == 1998-12-31 00:00:03 TAI-1998-12-30 23:59:59 UTC == 1998-12-31 00:00:30 TAI-1998-12-30 23:59:59.5 UTC == 1998-12-31 00:00:30.5 TAI-correction: 1998-12-30 23:59:60 UTC -> 1998-12-31 00:00:31 TAI -> 1998-12-31 00:00:00 UTC-correction: 1998-12-30 23:59:60.5 UTC -> 1998-12-31 00:00:31.5 TAI -> 1998-12-31 00:00:00.5 UTC-1998-12-31 00:00:00 UTC == 1998-12-31 00:00:31 TAI-1998-12-31 00:00:00.5 UTC == 1998-12-31 00:00:31.5 TAI-1998-12-31 00:00:01 UTC == 1998-12-31 00:00:32 TAI-1998-12-31 00:00:01.5 UTC == 1998-12-31 00:00:32.5 TAI-1998-12-31 00:00:02 UTC == 1998-12-31 00:00:33 TAI-1998-12-31 23:59:28 UTC == 1998-12-31 23:59:59 TAI-1998-12-31 23:59:28.5 UTC == 1998-12-31 23:59:59.5 TAI-1998-12-31 23:59:29 UTC == 1999-01-01 00:00:00 TAI-1998-12-31 23:59:29.5 UTC == 1999-01-01 00:00:00.5 TAI-1998-12-31 23:59:30 UTC == 1999-01-01 00:00:01 TAI-1998-12-31 23:59:30.5 UTC == 1999-01-01 00:00:01.5 TAI-1998-12-31 23:59:31 UTC == 1999-01-01 00:00:02 TAI-1998-12-31 23:59:31.5 UTC == 1999-01-01 00:00:02.5 TAI-1998-12-31 23:59:32 UTC == 1999-01-01 00:00:03 TAI-1998-12-31 23:59:59 UTC == 1999-01-01 00:00:30 TAI-1998-12-31 23:59:59.5 UTC == 1999-01-01 00:00:30.5 TAI-1998-12-31 23:59:60 UTC == 1999-01-01 00:00:31 TAI-1998-12-31 23:59:60.5 UTC == 1999-01-01 00:00:31.5 TAI-1999-01-01 00:00:00 UTC == 1999-01-01 00:00:32 TAI-1999-01-01 00:00:00.5 UTC == 1999-01-01 00:00:32.5 TAI-1999-01-01 00:00:01 UTC == 1999-01-01 00:00:33 TAI-1999-01-01 00:00:01.5 UTC == 1999-01-01 00:00:33.5 TAI-1999-01-01 00:00:02 UTC == 1999-01-01 00:00:34 TAI-1999-01-01 23:59:28 UTC == 1999-01-02 00:00:00 TAI-1999-01-01 23:59:28.5 UTC == 1999-01-02 00:00:00.5 TAI-1999-01-01 23:59:29 UTC == 1999-01-02 00:00:01 TAI-1999-01-01 23:59:29.5 UTC == 1999-01-02 00:00:01.5 TAI-1999-01-01 23:59:30 UTC == 1999-01-02 00:00:02 TAI-1999-01-01 23:59:30.5 UTC == 1999-01-02 00:00:02.5 TAI-1999-01-01 23:59:31 UTC == 1999-01-02 00:00:03 TAI-1999-01-01 23:59:31.5 UTC == 1999-01-02 00:00:03.5 TAI-1999-01-01 23:59:32 UTC == 1999-01-02 00:00:04 TAI-1999-01-01 23:59:59 UTC == 1999-01-02 00:00:31 TAI-1999-01-01 23:59:59.5 UTC == 1999-01-02 00:00:31.5 TAI-correction: 1999-01-01 23:59:60 UTC -> 1999-01-02 00:00:32 TAI -> 1999-01-02 00:00:00 UTC-correction: 1999-01-01 23:59:60.5 UTC -> 1999-01-02 00:00:32.5 TAI -> 1999-01-02 00:00:00.5 UTC-1999-01-02 00:00:00 UTC == 1999-01-02 00:00:32 TAI-1999-01-02 00:00:00.5 UTC == 1999-01-02 00:00:32.5 TAI-1999-01-02 00:00:01 UTC == 1999-01-02 00:00:33 TAI-1999-01-02 00:00:01.5 UTC == 1999-01-02 00:00:33.5 TAI-1999-01-02 00:00:02 UTC == 1999-01-02 00:00:34 TAI-1999-01-02 23:59:28 UTC == 1999-01-03 00:00:00 TAI-1999-01-02 23:59:28.5 UTC == 1999-01-03 00:00:00.5 TAI-1999-01-02 23:59:29 UTC == 1999-01-03 00:00:01 TAI-1999-01-02 23:59:29.5 UTC == 1999-01-03 00:00:01.5 TAI-1999-01-02 23:59:30 UTC == 1999-01-03 00:00:02 TAI-1999-01-02 23:59:30.5 UTC == 1999-01-03 00:00:02.5 TAI-1999-01-02 23:59:31 UTC == 1999-01-03 00:00:03 TAI-1999-01-02 23:59:31.5 UTC == 1999-01-03 00:00:03.5 TAI-1999-01-02 23:59:32 UTC == 1999-01-03 00:00:04 TAI-1999-01-02 23:59:59 UTC == 1999-01-03 00:00:31 TAI-1999-01-02 23:59:59.5 UTC == 1999-01-03 00:00:31.5 TAI-correction: 1999-01-02 23:59:60 UTC -> 1999-01-03 00:00:32 TAI -> 1999-01-03 00:00:00 UTC-correction: 1999-01-02 23:59:60.5 UTC -> 1999-01-03 00:00:32.5 TAI -> 1999-01-03 00:00:00.5 UTC
− test/TestParseTime.hs
@@ -1,437 +0,0 @@-{-# OPTIONS -Wall -Werror -fno-warn-type-defaults -fno-warn-unused-binds -fno-warn-orphans #-}-{-# LANGUAGE FlexibleInstances, ExistentialQuantification #-}--import Control.Monad-import Data.Char-import Data.Ratio-import Data.Maybe-import Data.Time-import Data.Time.Calendar.OrdinalDate-import Data.Time.Calendar.WeekDate-import Data.Time.Clock.POSIX-import System.Locale-import System.Exit-import Test.QuickCheck-import Test.QuickCheck.Batch---class RunTest p where- runTest :: p -> IO TestResult--instance RunTest (IO TestResult) where- runTest iob = iob--instance RunTest Property where- runTest p = run p (TestOptions {no_of_tests = 10000,length_of_tests = 0,debug_tests = False})--data ExhaustiveTest = forall t. (Show t) => MkExhaustiveTest [t] (t -> IO Bool)--instance RunTest ExhaustiveTest where- runTest (MkExhaustiveTest cases f) = do- results <- mapM (\t -> do {b <- f t;return (b,show t)}) cases- let failures = mapMaybe (\(b,n) -> if b then Nothing else Just n) results- let fcount = length failures- return (if fcount == 0 then TestOk "OK" 0 [] else TestFailed failures fcount)--ntest :: Int-ntest = 1000--main :: IO ()-main = do- putStrLn "Should work:"- good1 <- checkAll extests- putStrLn "Should work:"- good2 <- checkAll properties- putStrLn "Known failures:"- _ <- checkAll knownFailures- exitWith (if good1 && good2 then ExitSuccess else ExitFailure 1)--days2011 :: [Day]-days2011 = [(fromGregorian 2011 1 1) .. (fromGregorian 2011 12 31)]--extests :: [(String,ExhaustiveTest)]-extests = [- ("parse %y",MkExhaustiveTest [0..99] parseYY),- ("parse %C %y 1900s",MkExhaustiveTest [0..99] (parseCYY 19)),- ("parse %C %y 2000s",MkExhaustiveTest [0..99] (parseCYY 20)),- ("parse %C %y 1400s",MkExhaustiveTest [0..99] (parseCYY 14)),- ("parse %C %y 700s",MkExhaustiveTest [0..99] (parseCYY 7)),- ("parse %Y%m%d",MkExhaustiveTest days2011 parseYMD),- ("parse %Y %m %d",MkExhaustiveTest days2011 parseYearDayD),- ("parse %Y %-m %e",MkExhaustiveTest days2011 parseYearDayE)- ]--parseYMD :: Day -> IO Bool-parseYMD day = case toGregorian day of- (y,m,d) -> return $ (parse "%Y%m%d" ((show y) ++ (show2 m) ++ (show2 d))) == Just day--parseYearDayD :: Day -> IO Bool-parseYearDayD day = case toGregorian day of- (y,m,d) -> return $ (parse "%Y %m %d" ((show y) ++ " " ++ (show2 m) ++ " " ++ (show2 d))) == Just day--parseYearDayE :: Day -> IO Bool-parseYearDayE day = case toGregorian day of- (y,m,d) -> return $ (parse "%Y %-m %e" ((show y) ++ " " ++ (show m) ++ " " ++ (show d))) == Just day---- | 1969 - 2068-expectedYear :: Integer -> Integer-expectedYear i | i >= 69 = 1900 + i-expectedYear i = 2000 + i--show2 :: (Integral n) => n -> String-show2 i = (show (div i 10)) ++ (show (mod i 10))--parseYY :: Integer -> IO Bool-parseYY i = return (parse "%y" (show2 i) == Just (fromGregorian (expectedYear i) 1 1))--parseCYY :: Integer -> Integer -> IO Bool-parseCYY c i = return (parse "%C %y" ((show2 c) ++ " " ++ (show2 i)) == Just (fromGregorian ((c * 100) + i) 1 1))--checkAll :: RunTest p => [(String,p)] -> IO Bool-checkAll ps = fmap and (mapM checkOne ps)--trMessage :: TestResult -> String-trMessage (TestOk s _ _) = s-trMessage (TestExausted s i ss) = "Exhausted " ++ (show s) ++ " " ++ (show i) ++ " " ++ (show ss)-trMessage (TestFailed ss i) = "Failed " ++ (show ss) ++ " " ++ (show i)-trMessage (TestAborted ex) = "Aborted " ++ (show ex)--trGood :: TestResult -> Bool-trGood (TestOk _ _ _) = True-trGood _ = False--checkOne :: RunTest p => (String,p) -> IO Bool-checkOne (n,p) =- do- putStr (rpad 65 ' ' n)- tr <- runTest p- putStrLn (trMessage tr)- return (trGood tr)- where- rpad n' c xs = xs ++ replicate (n' - length xs) c---parse :: ParseTime t => String -> String -> Maybe t-parse f t = parseTime defaultTimeLocale f t--format :: (FormatTime t) => String -> t -> String-format f t = formatTime defaultTimeLocale f t---instance Arbitrary Day where- arbitrary = liftM ModifiedJulianDay $ choose (-313698, 2973483) -- 1000-01-1 to 9999-12-31- coarbitrary (ModifiedJulianDay d) = coarbitrary d--instance Arbitrary DiffTime where- arbitrary = oneof [intSecs, fracSecs] -- up to 1 leap second- where intSecs = liftM secondsToDiffTime' $ choose (0, 86400)- fracSecs = liftM picosecondsToDiffTime' $ choose (0, 86400 * 10^12)- secondsToDiffTime' :: Integer -> DiffTime- secondsToDiffTime' = fromInteger- picosecondsToDiffTime' :: Integer -> DiffTime- picosecondsToDiffTime' x = fromRational (x % 10^12)- coarbitrary t = coarbitrary (fromEnum t)--instance Arbitrary TimeOfDay where- arbitrary = liftM timeToTimeOfDay arbitrary- coarbitrary t = coarbitrary (timeOfDayToTime t)--instance Arbitrary LocalTime where- arbitrary = liftM2 LocalTime arbitrary arbitrary- coarbitrary t = coarbitrary (truncate (utcTimeToPOSIXSeconds (localTimeToUTC utc t)) :: Integer)--instance Arbitrary TimeZone where- arbitrary = liftM minutesToTimeZone $ choose (-720,720)- coarbitrary tz = coarbitrary (timeZoneMinutes tz)--instance Arbitrary ZonedTime where- arbitrary = liftM2 ZonedTime arbitrary arbitrary- coarbitrary t = coarbitrary (truncate (utcTimeToPOSIXSeconds (zonedTimeToUTC t)) :: Integer)--instance Arbitrary UTCTime where- arbitrary = liftM2 UTCTime arbitrary arbitrary- coarbitrary t = coarbitrary (truncate (utcTimeToPOSIXSeconds t) :: Integer)---- missing from the time package-instance Eq ZonedTime where- ZonedTime t1 tz1 == ZonedTime t2 tz2 = t1 == t2 && tz1 == tz2---- --- * tests for dbugging failing cases-----test_parse_format :: (FormatTime t,ParseTime t,Show t) => String -> t -> (String,String,Maybe t)-test_parse_format f t = let s = format f t in (show t, s, parse f s `asTypeOf` Just t)------- * show and read -----prop_read_show :: (Read a, Show a, Eq a) => a -> Bool-prop_read_show t = read (show t) == t------- * special show functions-----prop_parse_showWeekDate :: Day -> Bool-prop_parse_showWeekDate d = parse "%G-W%V-%u" (showWeekDate d) == Just d--prop_parse_showGregorian :: Day -> Bool-prop_parse_showGregorian d = parse "%Y-%m-%d" (showGregorian d) == Just d--prop_parse_showOrdinalDate :: Day -> Bool-prop_parse_showOrdinalDate d = parse "%Y-%j" (showOrdinalDate d) == Just d------- * fromMondayStartWeek and fromSundayStartWeek-----prop_fromMondayStartWeek :: Day -> Bool-prop_fromMondayStartWeek d = - let (w,wd) = mondayStartWeek d- (y,_,_) = toGregorian d- in fromMondayStartWeek y w wd == d--prop_fromSundayStartWeek :: Day -> Bool-prop_fromSundayStartWeek d = - let (w,wd) = sundayStartWeek d- (y,_,_) = toGregorian d- in fromSundayStartWeek y w wd == d------- * format and parse ------- | Helper for defining named properties.-prop_named :: (Arbitrary t, Show t, Testable a)- => String -> (FormatString s -> t -> a) -> String -> FormatString s -> NamedProperty-prop_named name prop typeName f = (name ++ " " ++ typeName ++ " " ++ show f, property (prop f))--prop_parse_format :: (Eq t, FormatTime t, ParseTime t) => FormatString t -> t -> Bool-prop_parse_format (FormatString f) t = parse f (format f t) == Just t--prop_parse_format_named :: (Arbitrary t, Eq t, Show t, FormatTime t, ParseTime t) - => String -> FormatString t -> NamedProperty-prop_parse_format_named = prop_named "prop_parse_format" prop_parse_format---- Verify case-insensitivity with upper case.-prop_parse_format_upper :: (Eq t, FormatTime t, ParseTime t) => FormatString t -> t -> Bool-prop_parse_format_upper (FormatString f) t = parse f (map toUpper $ format f t) == Just t--prop_parse_format_upper_named :: (Arbitrary t, Eq t, Show t, FormatTime t, ParseTime t) - => String -> FormatString t -> NamedProperty-prop_parse_format_upper_named = prop_named "prop_parse_format_upper" prop_parse_format_upper---- Verify case-insensitivity with lower case.-prop_parse_format_lower :: (Eq t, FormatTime t, ParseTime t) => FormatString t -> t -> Bool-prop_parse_format_lower (FormatString f) t = parse f (map toLower $ format f t) == Just t--prop_parse_format_lower_named :: (Arbitrary t, Eq t, Show t, FormatTime t, ParseTime t) - => String -> FormatString t -> NamedProperty-prop_parse_format_lower_named = prop_named "prop_parse_format_lower" prop_parse_format_lower--prop_format_parse_format :: (FormatTime t, ParseTime t) => FormatString t -> t -> Bool-prop_format_parse_format (FormatString f) t = - fmap (format f) (parse f (format f t) `asTypeOf` Just t) == Just (format f t)--prop_format_parse_format_named :: (Arbitrary t, Show t, FormatTime t, ParseTime t) - => String -> FormatString t -> NamedProperty-prop_format_parse_format_named = prop_named "prop_format_parse_format" prop_format_parse_format------- * crashes in parse-----newtype Input = Input String--instance Show Input where- show (Input s) = s--instance Arbitrary Input where- arbitrary = liftM Input $ list cs- where cs = elements (['0'..'9'] ++ ['-',' ','/'] ++ ['a'..'z'] ++ ['A' .. 'Z'])- list g = sized (\n -> choose (0,n) >>= \l -> replicateM l g)- coarbitrary (Input s) = coarbitrary (sum (map ord s))--prop_no_crash_bad_input :: (Eq t, ParseTime t) => FormatString t -> Input -> Property-prop_no_crash_bad_input fs@(FormatString f) (Input s) = property $ - case parse f s of- Nothing -> True- Just t -> t == t `asTypeOf` formatType fs- where -prop_no_crash_bad_input_named :: (Eq t, ParseTime t)- => String -> FormatString t -> NamedProperty-prop_no_crash_bad_input_named = prop_named "prop_no_crash_bad_input" prop_no_crash_bad_input------------newtype FormatString a = FormatString String--formatType :: FormatString t -> t-formatType _ = undefined--castFormatString :: FormatString a -> FormatString b-castFormatString (FormatString f) = FormatString f--instance Show (FormatString a) where- show (FormatString f) = show f--type NamedProperty = (String, Property)--properties :: [NamedProperty]-properties = - [("prop_fromMondayStartWeek", property prop_fromMondayStartWeek),- ("prop_fromSundayStartWeek", property prop_fromSundayStartWeek)]- ++ [("prop_read_show Day", property (prop_read_show :: Day -> Bool)),- ("prop_read_show TimeOfDay", property (prop_read_show :: TimeOfDay -> Bool)),- ("prop_read_show LocalTime", property (prop_read_show :: LocalTime -> Bool)),- ("prop_read_show TimeZone", property (prop_read_show :: TimeZone -> Bool)),- ("prop_read_show ZonedTime", property (prop_read_show :: ZonedTime -> Bool)),- ("prop_read_show UTCTime", property (prop_read_show :: UTCTime -> Bool))]- ++ [("prop_parse_showWeekDate", property prop_parse_showWeekDate),- ("prop_parse_showGregorian", property prop_parse_showGregorian),- ("prop_parse_showOrdinalDate", property prop_parse_showOrdinalDate)]-- ++ map (prop_parse_format_named "Day") dayFormats- ++ map (prop_parse_format_named "TimeOfDay") timeOfDayFormats- ++ map (prop_parse_format_named "LocalTime") localTimeFormats- ++ map (prop_parse_format_named "TimeZone") timeZoneFormats- ++ map (prop_parse_format_named "ZonedTime") zonedTimeFormats- ++ map (prop_parse_format_named "UTCTime") utcTimeFormats-- ++ map (prop_parse_format_upper_named "Day") dayFormats- ++ map (prop_parse_format_upper_named "TimeOfDay") timeOfDayFormats- ++ map (prop_parse_format_upper_named "LocalTime") localTimeFormats- ++ map (prop_parse_format_upper_named "TimeZone") timeZoneFormats- ++ map (prop_parse_format_upper_named "ZonedTime") zonedTimeFormats- ++ map (prop_parse_format_upper_named "UTCTime") utcTimeFormats-- ++ map (prop_parse_format_lower_named "Day") dayFormats- ++ map (prop_parse_format_lower_named "TimeOfDay") timeOfDayFormats- ++ map (prop_parse_format_lower_named "LocalTime") localTimeFormats- ++ map (prop_parse_format_lower_named "TimeZone") timeZoneFormats- ++ map (prop_parse_format_lower_named "ZonedTime") zonedTimeFormats- ++ map (prop_parse_format_lower_named "UTCTime") utcTimeFormats-- ++ map (prop_format_parse_format_named "Day") partialDayFormats- ++ map (prop_format_parse_format_named "TimeOfDay") partialTimeOfDayFormats- ++ map (prop_format_parse_format_named "LocalTime") partialLocalTimeFormats- ++ map (prop_format_parse_format_named "ZonedTime") partialZonedTimeFormats- ++ map (prop_format_parse_format_named "UTCTime") partialUTCTimeFormats-- ++ map (prop_no_crash_bad_input_named "Day") (dayFormats ++ partialDayFormats ++ failingPartialDayFormats)- ++ map (prop_no_crash_bad_input_named "TimeOfDay") (timeOfDayFormats ++ partialTimeOfDayFormats)- ++ map (prop_no_crash_bad_input_named "LocalTime") (localTimeFormats ++ partialLocalTimeFormats)- ++ map (prop_no_crash_bad_input_named "TimeZone") (timeZoneFormats)- ++ map (prop_no_crash_bad_input_named "ZonedTime") (zonedTimeFormats ++ partialZonedTimeFormats)- ++ map (prop_no_crash_bad_input_named "UTCTime") (utcTimeFormats ++ partialUTCTimeFormats)----dayFormats :: [FormatString Day]-dayFormats = map FormatString- [- -- numeric year, month, day- "%Y-%m-%d","%Y%m%d","%C%y%m%d","%Y %m %e","%m/%d/%Y","%d/%m/%Y","%Y/%d/%m","%D %C","%F",- -- month names- "%Y-%B-%d","%Y-%b-%d","%Y-%h-%d",- -- ordinal dates- "%Y-%j",- -- ISO week dates- "%G-%V-%u","%G-%V-%a","%G-%V-%A","%G-%V-%w", "%A week %V, %G", "day %V, week %A, %G",- "%G-W%V-%u",- "%f%g-%V-%u","%f%g-%V-%a","%f%g-%V-%A","%f%g-%V-%w", "%A week %V, %f%g", "day %V, week %A, %f%g",- "%f%g-W%V-%u",- -- monday and sunday week dates- "%Y-w%U-%A", "%Y-w%W-%A", "%Y-%A-w%U", "%Y-%A-w%W", "%A week %U, %Y", "%A week %W, %Y"- ]--timeOfDayFormats :: [FormatString TimeOfDay]-timeOfDayFormats = map FormatString- [- -- 24 h formats- "%H:%M:%S.%q","%k:%M:%S.%q","%H%M%S.%q","%T.%q","%X.%q","%R:%S.%q",- "%H:%M:%S%Q","%k:%M:%S%Q","%H%M%S%Q","%T%Q","%X%Q","%R:%S%Q",- -- 12 h formats- "%I:%M:%S.%q %p","%I:%M:%S.%q %P","%l:%M:%S.%q %p","%r %q",- "%I:%M:%S%Q %p","%I:%M:%S%Q %P","%l:%M:%S%Q %p","%r %Q"- ]--localTimeFormats :: [FormatString LocalTime]-localTimeFormats = map FormatString $ - []-{-- -- there's soo many of them...- concat [ [df ++ " " ++ tf, tf ++ " " ++ df] | FormatString df <- dayFormats, - FormatString tf <- timeOfDayFormats]--}--timeZoneFormats :: [FormatString TimeZone]-timeZoneFormats = map FormatString ["%z","%z%Z","%Z%z","%Z"]--zonedTimeFormats :: [FormatString ZonedTime]-zonedTimeFormats = map FormatString- ["%a, %d %b %Y %H:%M:%S.%q %z", "%a, %d %b %Y %H:%M:%S%Q %z", "%s.%q %z", "%s%Q %z",- "%a, %d %b %Y %H:%M:%S.%q %Z", "%a, %d %b %Y %H:%M:%S%Q %Z", "%s.%q %Z", "%s%Q %Z"]--utcTimeFormats :: [FormatString UTCTime]-utcTimeFormats = map FormatString - ["%s.%q","%s%Q"]------- * Formats that do not include all the information-----partialDayFormats :: [FormatString Day]-partialDayFormats = map FormatString- [ ]--partialTimeOfDayFormats :: [FormatString TimeOfDay]-partialTimeOfDayFormats = map FormatString- [ ]--partialLocalTimeFormats :: [FormatString LocalTime]-partialLocalTimeFormats = map FormatString - [- -- %c does not include second decimals - "%c" - ]--partialZonedTimeFormats :: [FormatString ZonedTime]-partialZonedTimeFormats = map FormatString - [- -- %s does not include second decimals- "%s %z",- -- %S does not include second decimals- "%c", "%a, %d %b %Y %H:%M:%S %Z"- ]--partialUTCTimeFormats :: [FormatString UTCTime]-partialUTCTimeFormats = map FormatString - [- -- %s does not include second decimals- "%s",- -- %c does not include second decimals- "%c"- ]-------- * Known failures-----knownFailures :: [NamedProperty]-knownFailures =- map (prop_format_parse_format_named "Day") failingPartialDayFormats--failingPartialDayFormats :: [FormatString Day]-failingPartialDayFormats = map FormatString- [ -- ISO week dates with two digit year. - -- This can fail in the beginning or the end of a year where- -- the ISO week date year does not match the gregorian year.- "%g-%V-%u","%g-%V-%a","%g-%V-%A","%g-%V-%w", "%A week %V, %g", "day %V, week %A, %g",- "%g-W%V-%u"- ]
− test/TestTime.hs
@@ -1,97 +0,0 @@-{-# OPTIONS -Wall -Werror #-}--module Main where--import Data.Time.Calendar.OrdinalDate-import Data.Time.Calendar.WeekDate-import Data.Time--showCal :: Integer -> IO ()-showCal mjd = do- let date = ModifiedJulianDay mjd- let (y,m,d) = toGregorian date- let date' = fromGregorian y m d- putStr ((show mjd) ++ "=" ++ (showGregorian date) ++ "=" ++ (showOrdinalDate date) ++ "=" ++ (showWeekDate date))- putStrLn (if date == date' then "" else "=" ++ (show (toModifiedJulianDay date')) ++ "!")--testCal :: IO ()-testCal = do- -- days around 1 BCE/1 CE- mapM_ showCal [-678950 .. -678930] - -- days around 1000 CE- mapM_ showCal [-313710 .. -313690] - -- days around MJD zero- mapM_ showCal [-30..30] - showCal 40000- showCal 50000- -- 1900 not a leap year- showCal 15078- showCal 15079- -- 1980 is a leap year- showCal 44297- showCal 44298- showCal 44299- -- 1990 not a leap year- showCal 47950- showCal 47951- -- 2000 is a leap year- showCal 51602- showCal 51603- showCal 51604- -- years 2000 and 2001, plus some slop- mapM_ showCal [51540..52280] --showUTCTime :: UTCTime -> String-showUTCTime (UTCTime d t) = show (toModifiedJulianDay d) ++ "," ++ show t--myzone :: TimeZone-myzone = hoursToTimeZone (- 8)--leapSec1998Cal :: LocalTime-leapSec1998Cal = LocalTime (fromGregorian 1998 12 31) (TimeOfDay 23 59 60.5)--leapSec1998 :: UTCTime-leapSec1998 = localTimeToUTC utc leapSec1998Cal--testUTC :: IO ()-testUTC = do- putStrLn ""- showCal 51178- putStrLn (show leapSec1998Cal)- putStrLn (showUTCTime leapSec1998)- let lsMineCal = utcToLocalTime myzone leapSec1998- putStrLn (show lsMineCal)- let lsMine = localTimeToUTC myzone lsMineCal- putStrLn (showUTCTime lsMine)--neglong :: Rational-neglong = -120--poslong :: Rational-poslong = 120--testUT1 :: IO ()-testUT1 = do- putStrLn ""- putStrLn (show (ut1ToLocalTime 0 (ModJulianDate 51604.0)))- putStrLn (show (ut1ToLocalTime 0 (ModJulianDate 51604.5)))- putStrLn (show (ut1ToLocalTime neglong (ModJulianDate 51604.0)))- putStrLn (show (ut1ToLocalTime neglong (ModJulianDate 51604.5)))- putStrLn (show (ut1ToLocalTime poslong (ModJulianDate 51604.0)))- putStrLn (show (ut1ToLocalTime poslong (ModJulianDate 51604.5)))--testTimeOfDayToDayFraction :: IO ()-testTimeOfDayToDayFraction = do- putStrLn ""- let f = dayFractionToTimeOfDay . timeOfDayToDayFraction- putStrLn (show (f (TimeOfDay 12 34 56.789)))- putStrLn (show (f (TimeOfDay 12 34 56.789123)))- putStrLn (show (f (TimeOfDay 12 34 56.789123456)))- putStrLn (show (f (TimeOfDay 12 34 56.789123456789)))--main :: IO ()-main = do- testCal- testUTC- testUT1- testTimeOfDayToDayFraction
− test/TestTime.ref
@@ -1,874 +0,0 @@--678950=-0001-12-23=-0001-357=-0001-W51-4--678949=-0001-12-24=-0001-358=-0001-W51-5--678948=-0001-12-25=-0001-359=-0001-W51-6--678947=-0001-12-26=-0001-360=-0001-W51-7--678946=-0001-12-27=-0001-361=-0001-W52-1--678945=-0001-12-28=-0001-362=-0001-W52-2--678944=-0001-12-29=-0001-363=-0001-W52-3--678943=-0001-12-30=-0001-364=-0001-W52-4--678942=-0001-12-31=-0001-365=-0001-W52-5--678941=0000-01-01=0000-001=-0001-W52-6--678940=0000-01-02=0000-002=-0001-W52-7--678939=0000-01-03=0000-003=0000-W01-1--678938=0000-01-04=0000-004=0000-W01-2--678937=0000-01-05=0000-005=0000-W01-3--678936=0000-01-06=0000-006=0000-W01-4--678935=0000-01-07=0000-007=0000-W01-5--678934=0000-01-08=0000-008=0000-W01-6--678933=0000-01-09=0000-009=0000-W01-7--678932=0000-01-10=0000-010=0000-W02-1--678931=0000-01-11=0000-011=0000-W02-2--678930=0000-01-12=0000-012=0000-W02-3--313710=0999-12-20=0999-354=0999-W51-5--313709=0999-12-21=0999-355=0999-W51-6--313708=0999-12-22=0999-356=0999-W51-7--313707=0999-12-23=0999-357=0999-W52-1--313706=0999-12-24=0999-358=0999-W52-2--313705=0999-12-25=0999-359=0999-W52-3--313704=0999-12-26=0999-360=0999-W52-4--313703=0999-12-27=0999-361=0999-W52-5--313702=0999-12-28=0999-362=0999-W52-6--313701=0999-12-29=0999-363=0999-W52-7--313700=0999-12-30=0999-364=1000-W01-1--313699=0999-12-31=0999-365=1000-W01-2--313698=1000-01-01=1000-001=1000-W01-3--313697=1000-01-02=1000-002=1000-W01-4--313696=1000-01-03=1000-003=1000-W01-5--313695=1000-01-04=1000-004=1000-W01-6--313694=1000-01-05=1000-005=1000-W01-7--313693=1000-01-06=1000-006=1000-W02-1--313692=1000-01-07=1000-007=1000-W02-2--313691=1000-01-08=1000-008=1000-W02-3--313690=1000-01-09=1000-009=1000-W02-4--30=1858-10-18=1858-291=1858-W42-1--29=1858-10-19=1858-292=1858-W42-2--28=1858-10-20=1858-293=1858-W42-3--27=1858-10-21=1858-294=1858-W42-4--26=1858-10-22=1858-295=1858-W42-5--25=1858-10-23=1858-296=1858-W42-6--24=1858-10-24=1858-297=1858-W42-7--23=1858-10-25=1858-298=1858-W43-1--22=1858-10-26=1858-299=1858-W43-2--21=1858-10-27=1858-300=1858-W43-3--20=1858-10-28=1858-301=1858-W43-4--19=1858-10-29=1858-302=1858-W43-5--18=1858-10-30=1858-303=1858-W43-6--17=1858-10-31=1858-304=1858-W43-7--16=1858-11-01=1858-305=1858-W44-1--15=1858-11-02=1858-306=1858-W44-2--14=1858-11-03=1858-307=1858-W44-3--13=1858-11-04=1858-308=1858-W44-4--12=1858-11-05=1858-309=1858-W44-5--11=1858-11-06=1858-310=1858-W44-6--10=1858-11-07=1858-311=1858-W44-7--9=1858-11-08=1858-312=1858-W45-1--8=1858-11-09=1858-313=1858-W45-2--7=1858-11-10=1858-314=1858-W45-3--6=1858-11-11=1858-315=1858-W45-4--5=1858-11-12=1858-316=1858-W45-5--4=1858-11-13=1858-317=1858-W45-6--3=1858-11-14=1858-318=1858-W45-7--2=1858-11-15=1858-319=1858-W46-1--1=1858-11-16=1858-320=1858-W46-2-0=1858-11-17=1858-321=1858-W46-3-1=1858-11-18=1858-322=1858-W46-4-2=1858-11-19=1858-323=1858-W46-5-3=1858-11-20=1858-324=1858-W46-6-4=1858-11-21=1858-325=1858-W46-7-5=1858-11-22=1858-326=1858-W47-1-6=1858-11-23=1858-327=1858-W47-2-7=1858-11-24=1858-328=1858-W47-3-8=1858-11-25=1858-329=1858-W47-4-9=1858-11-26=1858-330=1858-W47-5-10=1858-11-27=1858-331=1858-W47-6-11=1858-11-28=1858-332=1858-W47-7-12=1858-11-29=1858-333=1858-W48-1-13=1858-11-30=1858-334=1858-W48-2-14=1858-12-01=1858-335=1858-W48-3-15=1858-12-02=1858-336=1858-W48-4-16=1858-12-03=1858-337=1858-W48-5-17=1858-12-04=1858-338=1858-W48-6-18=1858-12-05=1858-339=1858-W48-7-19=1858-12-06=1858-340=1858-W49-1-20=1858-12-07=1858-341=1858-W49-2-21=1858-12-08=1858-342=1858-W49-3-22=1858-12-09=1858-343=1858-W49-4-23=1858-12-10=1858-344=1858-W49-5-24=1858-12-11=1858-345=1858-W49-6-25=1858-12-12=1858-346=1858-W49-7-26=1858-12-13=1858-347=1858-W50-1-27=1858-12-14=1858-348=1858-W50-2-28=1858-12-15=1858-349=1858-W50-3-29=1858-12-16=1858-350=1858-W50-4-30=1858-12-17=1858-351=1858-W50-5-40000=1968-05-24=1968-145=1968-W21-5-50000=1995-10-10=1995-283=1995-W41-2-15078=1900-02-28=1900-059=1900-W09-3-15079=1900-03-01=1900-060=1900-W09-4-44297=1980-02-28=1980-059=1980-W09-4-44298=1980-02-29=1980-060=1980-W09-5-44299=1980-03-01=1980-061=1980-W09-6-47950=1990-02-28=1990-059=1990-W09-3-47951=1990-03-01=1990-060=1990-W09-4-51602=2000-02-28=2000-059=2000-W09-1-51603=2000-02-29=2000-060=2000-W09-2-51604=2000-03-01=2000-061=2000-W09-3-51540=1999-12-28=1999-362=1999-W52-2-51541=1999-12-29=1999-363=1999-W52-3-51542=1999-12-30=1999-364=1999-W52-4-51543=1999-12-31=1999-365=1999-W52-5-51544=2000-01-01=2000-001=1999-W52-6-51545=2000-01-02=2000-002=1999-W52-7-51546=2000-01-03=2000-003=2000-W01-1-51547=2000-01-04=2000-004=2000-W01-2-51548=2000-01-05=2000-005=2000-W01-3-51549=2000-01-06=2000-006=2000-W01-4-51550=2000-01-07=2000-007=2000-W01-5-51551=2000-01-08=2000-008=2000-W01-6-51552=2000-01-09=2000-009=2000-W01-7-51553=2000-01-10=2000-010=2000-W02-1-51554=2000-01-11=2000-011=2000-W02-2-51555=2000-01-12=2000-012=2000-W02-3-51556=2000-01-13=2000-013=2000-W02-4-51557=2000-01-14=2000-014=2000-W02-5-51558=2000-01-15=2000-015=2000-W02-6-51559=2000-01-16=2000-016=2000-W02-7-51560=2000-01-17=2000-017=2000-W03-1-51561=2000-01-18=2000-018=2000-W03-2-51562=2000-01-19=2000-019=2000-W03-3-51563=2000-01-20=2000-020=2000-W03-4-51564=2000-01-21=2000-021=2000-W03-5-51565=2000-01-22=2000-022=2000-W03-6-51566=2000-01-23=2000-023=2000-W03-7-51567=2000-01-24=2000-024=2000-W04-1-51568=2000-01-25=2000-025=2000-W04-2-51569=2000-01-26=2000-026=2000-W04-3-51570=2000-01-27=2000-027=2000-W04-4-51571=2000-01-28=2000-028=2000-W04-5-51572=2000-01-29=2000-029=2000-W04-6-51573=2000-01-30=2000-030=2000-W04-7-51574=2000-01-31=2000-031=2000-W05-1-51575=2000-02-01=2000-032=2000-W05-2-51576=2000-02-02=2000-033=2000-W05-3-51577=2000-02-03=2000-034=2000-W05-4-51578=2000-02-04=2000-035=2000-W05-5-51579=2000-02-05=2000-036=2000-W05-6-51580=2000-02-06=2000-037=2000-W05-7-51581=2000-02-07=2000-038=2000-W06-1-51582=2000-02-08=2000-039=2000-W06-2-51583=2000-02-09=2000-040=2000-W06-3-51584=2000-02-10=2000-041=2000-W06-4-51585=2000-02-11=2000-042=2000-W06-5-51586=2000-02-12=2000-043=2000-W06-6-51587=2000-02-13=2000-044=2000-W06-7-51588=2000-02-14=2000-045=2000-W07-1-51589=2000-02-15=2000-046=2000-W07-2-51590=2000-02-16=2000-047=2000-W07-3-51591=2000-02-17=2000-048=2000-W07-4-51592=2000-02-18=2000-049=2000-W07-5-51593=2000-02-19=2000-050=2000-W07-6-51594=2000-02-20=2000-051=2000-W07-7-51595=2000-02-21=2000-052=2000-W08-1-51596=2000-02-22=2000-053=2000-W08-2-51597=2000-02-23=2000-054=2000-W08-3-51598=2000-02-24=2000-055=2000-W08-4-51599=2000-02-25=2000-056=2000-W08-5-51600=2000-02-26=2000-057=2000-W08-6-51601=2000-02-27=2000-058=2000-W08-7-51602=2000-02-28=2000-059=2000-W09-1-51603=2000-02-29=2000-060=2000-W09-2-51604=2000-03-01=2000-061=2000-W09-3-51605=2000-03-02=2000-062=2000-W09-4-51606=2000-03-03=2000-063=2000-W09-5-51607=2000-03-04=2000-064=2000-W09-6-51608=2000-03-05=2000-065=2000-W09-7-51609=2000-03-06=2000-066=2000-W10-1-51610=2000-03-07=2000-067=2000-W10-2-51611=2000-03-08=2000-068=2000-W10-3-51612=2000-03-09=2000-069=2000-W10-4-51613=2000-03-10=2000-070=2000-W10-5-51614=2000-03-11=2000-071=2000-W10-6-51615=2000-03-12=2000-072=2000-W10-7-51616=2000-03-13=2000-073=2000-W11-1-51617=2000-03-14=2000-074=2000-W11-2-51618=2000-03-15=2000-075=2000-W11-3-51619=2000-03-16=2000-076=2000-W11-4-51620=2000-03-17=2000-077=2000-W11-5-51621=2000-03-18=2000-078=2000-W11-6-51622=2000-03-19=2000-079=2000-W11-7-51623=2000-03-20=2000-080=2000-W12-1-51624=2000-03-21=2000-081=2000-W12-2-51625=2000-03-22=2000-082=2000-W12-3-51626=2000-03-23=2000-083=2000-W12-4-51627=2000-03-24=2000-084=2000-W12-5-51628=2000-03-25=2000-085=2000-W12-6-51629=2000-03-26=2000-086=2000-W12-7-51630=2000-03-27=2000-087=2000-W13-1-51631=2000-03-28=2000-088=2000-W13-2-51632=2000-03-29=2000-089=2000-W13-3-51633=2000-03-30=2000-090=2000-W13-4-51634=2000-03-31=2000-091=2000-W13-5-51635=2000-04-01=2000-092=2000-W13-6-51636=2000-04-02=2000-093=2000-W13-7-51637=2000-04-03=2000-094=2000-W14-1-51638=2000-04-04=2000-095=2000-W14-2-51639=2000-04-05=2000-096=2000-W14-3-51640=2000-04-06=2000-097=2000-W14-4-51641=2000-04-07=2000-098=2000-W14-5-51642=2000-04-08=2000-099=2000-W14-6-51643=2000-04-09=2000-100=2000-W14-7-51644=2000-04-10=2000-101=2000-W15-1-51645=2000-04-11=2000-102=2000-W15-2-51646=2000-04-12=2000-103=2000-W15-3-51647=2000-04-13=2000-104=2000-W15-4-51648=2000-04-14=2000-105=2000-W15-5-51649=2000-04-15=2000-106=2000-W15-6-51650=2000-04-16=2000-107=2000-W15-7-51651=2000-04-17=2000-108=2000-W16-1-51652=2000-04-18=2000-109=2000-W16-2-51653=2000-04-19=2000-110=2000-W16-3-51654=2000-04-20=2000-111=2000-W16-4-51655=2000-04-21=2000-112=2000-W16-5-51656=2000-04-22=2000-113=2000-W16-6-51657=2000-04-23=2000-114=2000-W16-7-51658=2000-04-24=2000-115=2000-W17-1-51659=2000-04-25=2000-116=2000-W17-2-51660=2000-04-26=2000-117=2000-W17-3-51661=2000-04-27=2000-118=2000-W17-4-51662=2000-04-28=2000-119=2000-W17-5-51663=2000-04-29=2000-120=2000-W17-6-51664=2000-04-30=2000-121=2000-W17-7-51665=2000-05-01=2000-122=2000-W18-1-51666=2000-05-02=2000-123=2000-W18-2-51667=2000-05-03=2000-124=2000-W18-3-51668=2000-05-04=2000-125=2000-W18-4-51669=2000-05-05=2000-126=2000-W18-5-51670=2000-05-06=2000-127=2000-W18-6-51671=2000-05-07=2000-128=2000-W18-7-51672=2000-05-08=2000-129=2000-W19-1-51673=2000-05-09=2000-130=2000-W19-2-51674=2000-05-10=2000-131=2000-W19-3-51675=2000-05-11=2000-132=2000-W19-4-51676=2000-05-12=2000-133=2000-W19-5-51677=2000-05-13=2000-134=2000-W19-6-51678=2000-05-14=2000-135=2000-W19-7-51679=2000-05-15=2000-136=2000-W20-1-51680=2000-05-16=2000-137=2000-W20-2-51681=2000-05-17=2000-138=2000-W20-3-51682=2000-05-18=2000-139=2000-W20-4-51683=2000-05-19=2000-140=2000-W20-5-51684=2000-05-20=2000-141=2000-W20-6-51685=2000-05-21=2000-142=2000-W20-7-51686=2000-05-22=2000-143=2000-W21-1-51687=2000-05-23=2000-144=2000-W21-2-51688=2000-05-24=2000-145=2000-W21-3-51689=2000-05-25=2000-146=2000-W21-4-51690=2000-05-26=2000-147=2000-W21-5-51691=2000-05-27=2000-148=2000-W21-6-51692=2000-05-28=2000-149=2000-W21-7-51693=2000-05-29=2000-150=2000-W22-1-51694=2000-05-30=2000-151=2000-W22-2-51695=2000-05-31=2000-152=2000-W22-3-51696=2000-06-01=2000-153=2000-W22-4-51697=2000-06-02=2000-154=2000-W22-5-51698=2000-06-03=2000-155=2000-W22-6-51699=2000-06-04=2000-156=2000-W22-7-51700=2000-06-05=2000-157=2000-W23-1-51701=2000-06-06=2000-158=2000-W23-2-51702=2000-06-07=2000-159=2000-W23-3-51703=2000-06-08=2000-160=2000-W23-4-51704=2000-06-09=2000-161=2000-W23-5-51705=2000-06-10=2000-162=2000-W23-6-51706=2000-06-11=2000-163=2000-W23-7-51707=2000-06-12=2000-164=2000-W24-1-51708=2000-06-13=2000-165=2000-W24-2-51709=2000-06-14=2000-166=2000-W24-3-51710=2000-06-15=2000-167=2000-W24-4-51711=2000-06-16=2000-168=2000-W24-5-51712=2000-06-17=2000-169=2000-W24-6-51713=2000-06-18=2000-170=2000-W24-7-51714=2000-06-19=2000-171=2000-W25-1-51715=2000-06-20=2000-172=2000-W25-2-51716=2000-06-21=2000-173=2000-W25-3-51717=2000-06-22=2000-174=2000-W25-4-51718=2000-06-23=2000-175=2000-W25-5-51719=2000-06-24=2000-176=2000-W25-6-51720=2000-06-25=2000-177=2000-W25-7-51721=2000-06-26=2000-178=2000-W26-1-51722=2000-06-27=2000-179=2000-W26-2-51723=2000-06-28=2000-180=2000-W26-3-51724=2000-06-29=2000-181=2000-W26-4-51725=2000-06-30=2000-182=2000-W26-5-51726=2000-07-01=2000-183=2000-W26-6-51727=2000-07-02=2000-184=2000-W26-7-51728=2000-07-03=2000-185=2000-W27-1-51729=2000-07-04=2000-186=2000-W27-2-51730=2000-07-05=2000-187=2000-W27-3-51731=2000-07-06=2000-188=2000-W27-4-51732=2000-07-07=2000-189=2000-W27-5-51733=2000-07-08=2000-190=2000-W27-6-51734=2000-07-09=2000-191=2000-W27-7-51735=2000-07-10=2000-192=2000-W28-1-51736=2000-07-11=2000-193=2000-W28-2-51737=2000-07-12=2000-194=2000-W28-3-51738=2000-07-13=2000-195=2000-W28-4-51739=2000-07-14=2000-196=2000-W28-5-51740=2000-07-15=2000-197=2000-W28-6-51741=2000-07-16=2000-198=2000-W28-7-51742=2000-07-17=2000-199=2000-W29-1-51743=2000-07-18=2000-200=2000-W29-2-51744=2000-07-19=2000-201=2000-W29-3-51745=2000-07-20=2000-202=2000-W29-4-51746=2000-07-21=2000-203=2000-W29-5-51747=2000-07-22=2000-204=2000-W29-6-51748=2000-07-23=2000-205=2000-W29-7-51749=2000-07-24=2000-206=2000-W30-1-51750=2000-07-25=2000-207=2000-W30-2-51751=2000-07-26=2000-208=2000-W30-3-51752=2000-07-27=2000-209=2000-W30-4-51753=2000-07-28=2000-210=2000-W30-5-51754=2000-07-29=2000-211=2000-W30-6-51755=2000-07-30=2000-212=2000-W30-7-51756=2000-07-31=2000-213=2000-W31-1-51757=2000-08-01=2000-214=2000-W31-2-51758=2000-08-02=2000-215=2000-W31-3-51759=2000-08-03=2000-216=2000-W31-4-51760=2000-08-04=2000-217=2000-W31-5-51761=2000-08-05=2000-218=2000-W31-6-51762=2000-08-06=2000-219=2000-W31-7-51763=2000-08-07=2000-220=2000-W32-1-51764=2000-08-08=2000-221=2000-W32-2-51765=2000-08-09=2000-222=2000-W32-3-51766=2000-08-10=2000-223=2000-W32-4-51767=2000-08-11=2000-224=2000-W32-5-51768=2000-08-12=2000-225=2000-W32-6-51769=2000-08-13=2000-226=2000-W32-7-51770=2000-08-14=2000-227=2000-W33-1-51771=2000-08-15=2000-228=2000-W33-2-51772=2000-08-16=2000-229=2000-W33-3-51773=2000-08-17=2000-230=2000-W33-4-51774=2000-08-18=2000-231=2000-W33-5-51775=2000-08-19=2000-232=2000-W33-6-51776=2000-08-20=2000-233=2000-W33-7-51777=2000-08-21=2000-234=2000-W34-1-51778=2000-08-22=2000-235=2000-W34-2-51779=2000-08-23=2000-236=2000-W34-3-51780=2000-08-24=2000-237=2000-W34-4-51781=2000-08-25=2000-238=2000-W34-5-51782=2000-08-26=2000-239=2000-W34-6-51783=2000-08-27=2000-240=2000-W34-7-51784=2000-08-28=2000-241=2000-W35-1-51785=2000-08-29=2000-242=2000-W35-2-51786=2000-08-30=2000-243=2000-W35-3-51787=2000-08-31=2000-244=2000-W35-4-51788=2000-09-01=2000-245=2000-W35-5-51789=2000-09-02=2000-246=2000-W35-6-51790=2000-09-03=2000-247=2000-W35-7-51791=2000-09-04=2000-248=2000-W36-1-51792=2000-09-05=2000-249=2000-W36-2-51793=2000-09-06=2000-250=2000-W36-3-51794=2000-09-07=2000-251=2000-W36-4-51795=2000-09-08=2000-252=2000-W36-5-51796=2000-09-09=2000-253=2000-W36-6-51797=2000-09-10=2000-254=2000-W36-7-51798=2000-09-11=2000-255=2000-W37-1-51799=2000-09-12=2000-256=2000-W37-2-51800=2000-09-13=2000-257=2000-W37-3-51801=2000-09-14=2000-258=2000-W37-4-51802=2000-09-15=2000-259=2000-W37-5-51803=2000-09-16=2000-260=2000-W37-6-51804=2000-09-17=2000-261=2000-W37-7-51805=2000-09-18=2000-262=2000-W38-1-51806=2000-09-19=2000-263=2000-W38-2-51807=2000-09-20=2000-264=2000-W38-3-51808=2000-09-21=2000-265=2000-W38-4-51809=2000-09-22=2000-266=2000-W38-5-51810=2000-09-23=2000-267=2000-W38-6-51811=2000-09-24=2000-268=2000-W38-7-51812=2000-09-25=2000-269=2000-W39-1-51813=2000-09-26=2000-270=2000-W39-2-51814=2000-09-27=2000-271=2000-W39-3-51815=2000-09-28=2000-272=2000-W39-4-51816=2000-09-29=2000-273=2000-W39-5-51817=2000-09-30=2000-274=2000-W39-6-51818=2000-10-01=2000-275=2000-W39-7-51819=2000-10-02=2000-276=2000-W40-1-51820=2000-10-03=2000-277=2000-W40-2-51821=2000-10-04=2000-278=2000-W40-3-51822=2000-10-05=2000-279=2000-W40-4-51823=2000-10-06=2000-280=2000-W40-5-51824=2000-10-07=2000-281=2000-W40-6-51825=2000-10-08=2000-282=2000-W40-7-51826=2000-10-09=2000-283=2000-W41-1-51827=2000-10-10=2000-284=2000-W41-2-51828=2000-10-11=2000-285=2000-W41-3-51829=2000-10-12=2000-286=2000-W41-4-51830=2000-10-13=2000-287=2000-W41-5-51831=2000-10-14=2000-288=2000-W41-6-51832=2000-10-15=2000-289=2000-W41-7-51833=2000-10-16=2000-290=2000-W42-1-51834=2000-10-17=2000-291=2000-W42-2-51835=2000-10-18=2000-292=2000-W42-3-51836=2000-10-19=2000-293=2000-W42-4-51837=2000-10-20=2000-294=2000-W42-5-51838=2000-10-21=2000-295=2000-W42-6-51839=2000-10-22=2000-296=2000-W42-7-51840=2000-10-23=2000-297=2000-W43-1-51841=2000-10-24=2000-298=2000-W43-2-51842=2000-10-25=2000-299=2000-W43-3-51843=2000-10-26=2000-300=2000-W43-4-51844=2000-10-27=2000-301=2000-W43-5-51845=2000-10-28=2000-302=2000-W43-6-51846=2000-10-29=2000-303=2000-W43-7-51847=2000-10-30=2000-304=2000-W44-1-51848=2000-10-31=2000-305=2000-W44-2-51849=2000-11-01=2000-306=2000-W44-3-51850=2000-11-02=2000-307=2000-W44-4-51851=2000-11-03=2000-308=2000-W44-5-51852=2000-11-04=2000-309=2000-W44-6-51853=2000-11-05=2000-310=2000-W44-7-51854=2000-11-06=2000-311=2000-W45-1-51855=2000-11-07=2000-312=2000-W45-2-51856=2000-11-08=2000-313=2000-W45-3-51857=2000-11-09=2000-314=2000-W45-4-51858=2000-11-10=2000-315=2000-W45-5-51859=2000-11-11=2000-316=2000-W45-6-51860=2000-11-12=2000-317=2000-W45-7-51861=2000-11-13=2000-318=2000-W46-1-51862=2000-11-14=2000-319=2000-W46-2-51863=2000-11-15=2000-320=2000-W46-3-51864=2000-11-16=2000-321=2000-W46-4-51865=2000-11-17=2000-322=2000-W46-5-51866=2000-11-18=2000-323=2000-W46-6-51867=2000-11-19=2000-324=2000-W46-7-51868=2000-11-20=2000-325=2000-W47-1-51869=2000-11-21=2000-326=2000-W47-2-51870=2000-11-22=2000-327=2000-W47-3-51871=2000-11-23=2000-328=2000-W47-4-51872=2000-11-24=2000-329=2000-W47-5-51873=2000-11-25=2000-330=2000-W47-6-51874=2000-11-26=2000-331=2000-W47-7-51875=2000-11-27=2000-332=2000-W48-1-51876=2000-11-28=2000-333=2000-W48-2-51877=2000-11-29=2000-334=2000-W48-3-51878=2000-11-30=2000-335=2000-W48-4-51879=2000-12-01=2000-336=2000-W48-5-51880=2000-12-02=2000-337=2000-W48-6-51881=2000-12-03=2000-338=2000-W48-7-51882=2000-12-04=2000-339=2000-W49-1-51883=2000-12-05=2000-340=2000-W49-2-51884=2000-12-06=2000-341=2000-W49-3-51885=2000-12-07=2000-342=2000-W49-4-51886=2000-12-08=2000-343=2000-W49-5-51887=2000-12-09=2000-344=2000-W49-6-51888=2000-12-10=2000-345=2000-W49-7-51889=2000-12-11=2000-346=2000-W50-1-51890=2000-12-12=2000-347=2000-W50-2-51891=2000-12-13=2000-348=2000-W50-3-51892=2000-12-14=2000-349=2000-W50-4-51893=2000-12-15=2000-350=2000-W50-5-51894=2000-12-16=2000-351=2000-W50-6-51895=2000-12-17=2000-352=2000-W50-7-51896=2000-12-18=2000-353=2000-W51-1-51897=2000-12-19=2000-354=2000-W51-2-51898=2000-12-20=2000-355=2000-W51-3-51899=2000-12-21=2000-356=2000-W51-4-51900=2000-12-22=2000-357=2000-W51-5-51901=2000-12-23=2000-358=2000-W51-6-51902=2000-12-24=2000-359=2000-W51-7-51903=2000-12-25=2000-360=2000-W52-1-51904=2000-12-26=2000-361=2000-W52-2-51905=2000-12-27=2000-362=2000-W52-3-51906=2000-12-28=2000-363=2000-W52-4-51907=2000-12-29=2000-364=2000-W52-5-51908=2000-12-30=2000-365=2000-W52-6-51909=2000-12-31=2000-366=2000-W52-7-51910=2001-01-01=2001-001=2001-W01-1-51911=2001-01-02=2001-002=2001-W01-2-51912=2001-01-03=2001-003=2001-W01-3-51913=2001-01-04=2001-004=2001-W01-4-51914=2001-01-05=2001-005=2001-W01-5-51915=2001-01-06=2001-006=2001-W01-6-51916=2001-01-07=2001-007=2001-W01-7-51917=2001-01-08=2001-008=2001-W02-1-51918=2001-01-09=2001-009=2001-W02-2-51919=2001-01-10=2001-010=2001-W02-3-51920=2001-01-11=2001-011=2001-W02-4-51921=2001-01-12=2001-012=2001-W02-5-51922=2001-01-13=2001-013=2001-W02-6-51923=2001-01-14=2001-014=2001-W02-7-51924=2001-01-15=2001-015=2001-W03-1-51925=2001-01-16=2001-016=2001-W03-2-51926=2001-01-17=2001-017=2001-W03-3-51927=2001-01-18=2001-018=2001-W03-4-51928=2001-01-19=2001-019=2001-W03-5-51929=2001-01-20=2001-020=2001-W03-6-51930=2001-01-21=2001-021=2001-W03-7-51931=2001-01-22=2001-022=2001-W04-1-51932=2001-01-23=2001-023=2001-W04-2-51933=2001-01-24=2001-024=2001-W04-3-51934=2001-01-25=2001-025=2001-W04-4-51935=2001-01-26=2001-026=2001-W04-5-51936=2001-01-27=2001-027=2001-W04-6-51937=2001-01-28=2001-028=2001-W04-7-51938=2001-01-29=2001-029=2001-W05-1-51939=2001-01-30=2001-030=2001-W05-2-51940=2001-01-31=2001-031=2001-W05-3-51941=2001-02-01=2001-032=2001-W05-4-51942=2001-02-02=2001-033=2001-W05-5-51943=2001-02-03=2001-034=2001-W05-6-51944=2001-02-04=2001-035=2001-W05-7-51945=2001-02-05=2001-036=2001-W06-1-51946=2001-02-06=2001-037=2001-W06-2-51947=2001-02-07=2001-038=2001-W06-3-51948=2001-02-08=2001-039=2001-W06-4-51949=2001-02-09=2001-040=2001-W06-5-51950=2001-02-10=2001-041=2001-W06-6-51951=2001-02-11=2001-042=2001-W06-7-51952=2001-02-12=2001-043=2001-W07-1-51953=2001-02-13=2001-044=2001-W07-2-51954=2001-02-14=2001-045=2001-W07-3-51955=2001-02-15=2001-046=2001-W07-4-51956=2001-02-16=2001-047=2001-W07-5-51957=2001-02-17=2001-048=2001-W07-6-51958=2001-02-18=2001-049=2001-W07-7-51959=2001-02-19=2001-050=2001-W08-1-51960=2001-02-20=2001-051=2001-W08-2-51961=2001-02-21=2001-052=2001-W08-3-51962=2001-02-22=2001-053=2001-W08-4-51963=2001-02-23=2001-054=2001-W08-5-51964=2001-02-24=2001-055=2001-W08-6-51965=2001-02-25=2001-056=2001-W08-7-51966=2001-02-26=2001-057=2001-W09-1-51967=2001-02-27=2001-058=2001-W09-2-51968=2001-02-28=2001-059=2001-W09-3-51969=2001-03-01=2001-060=2001-W09-4-51970=2001-03-02=2001-061=2001-W09-5-51971=2001-03-03=2001-062=2001-W09-6-51972=2001-03-04=2001-063=2001-W09-7-51973=2001-03-05=2001-064=2001-W10-1-51974=2001-03-06=2001-065=2001-W10-2-51975=2001-03-07=2001-066=2001-W10-3-51976=2001-03-08=2001-067=2001-W10-4-51977=2001-03-09=2001-068=2001-W10-5-51978=2001-03-10=2001-069=2001-W10-6-51979=2001-03-11=2001-070=2001-W10-7-51980=2001-03-12=2001-071=2001-W11-1-51981=2001-03-13=2001-072=2001-W11-2-51982=2001-03-14=2001-073=2001-W11-3-51983=2001-03-15=2001-074=2001-W11-4-51984=2001-03-16=2001-075=2001-W11-5-51985=2001-03-17=2001-076=2001-W11-6-51986=2001-03-18=2001-077=2001-W11-7-51987=2001-03-19=2001-078=2001-W12-1-51988=2001-03-20=2001-079=2001-W12-2-51989=2001-03-21=2001-080=2001-W12-3-51990=2001-03-22=2001-081=2001-W12-4-51991=2001-03-23=2001-082=2001-W12-5-51992=2001-03-24=2001-083=2001-W12-6-51993=2001-03-25=2001-084=2001-W12-7-51994=2001-03-26=2001-085=2001-W13-1-51995=2001-03-27=2001-086=2001-W13-2-51996=2001-03-28=2001-087=2001-W13-3-51997=2001-03-29=2001-088=2001-W13-4-51998=2001-03-30=2001-089=2001-W13-5-51999=2001-03-31=2001-090=2001-W13-6-52000=2001-04-01=2001-091=2001-W13-7-52001=2001-04-02=2001-092=2001-W14-1-52002=2001-04-03=2001-093=2001-W14-2-52003=2001-04-04=2001-094=2001-W14-3-52004=2001-04-05=2001-095=2001-W14-4-52005=2001-04-06=2001-096=2001-W14-5-52006=2001-04-07=2001-097=2001-W14-6-52007=2001-04-08=2001-098=2001-W14-7-52008=2001-04-09=2001-099=2001-W15-1-52009=2001-04-10=2001-100=2001-W15-2-52010=2001-04-11=2001-101=2001-W15-3-52011=2001-04-12=2001-102=2001-W15-4-52012=2001-04-13=2001-103=2001-W15-5-52013=2001-04-14=2001-104=2001-W15-6-52014=2001-04-15=2001-105=2001-W15-7-52015=2001-04-16=2001-106=2001-W16-1-52016=2001-04-17=2001-107=2001-W16-2-52017=2001-04-18=2001-108=2001-W16-3-52018=2001-04-19=2001-109=2001-W16-4-52019=2001-04-20=2001-110=2001-W16-5-52020=2001-04-21=2001-111=2001-W16-6-52021=2001-04-22=2001-112=2001-W16-7-52022=2001-04-23=2001-113=2001-W17-1-52023=2001-04-24=2001-114=2001-W17-2-52024=2001-04-25=2001-115=2001-W17-3-52025=2001-04-26=2001-116=2001-W17-4-52026=2001-04-27=2001-117=2001-W17-5-52027=2001-04-28=2001-118=2001-W17-6-52028=2001-04-29=2001-119=2001-W17-7-52029=2001-04-30=2001-120=2001-W18-1-52030=2001-05-01=2001-121=2001-W18-2-52031=2001-05-02=2001-122=2001-W18-3-52032=2001-05-03=2001-123=2001-W18-4-52033=2001-05-04=2001-124=2001-W18-5-52034=2001-05-05=2001-125=2001-W18-6-52035=2001-05-06=2001-126=2001-W18-7-52036=2001-05-07=2001-127=2001-W19-1-52037=2001-05-08=2001-128=2001-W19-2-52038=2001-05-09=2001-129=2001-W19-3-52039=2001-05-10=2001-130=2001-W19-4-52040=2001-05-11=2001-131=2001-W19-5-52041=2001-05-12=2001-132=2001-W19-6-52042=2001-05-13=2001-133=2001-W19-7-52043=2001-05-14=2001-134=2001-W20-1-52044=2001-05-15=2001-135=2001-W20-2-52045=2001-05-16=2001-136=2001-W20-3-52046=2001-05-17=2001-137=2001-W20-4-52047=2001-05-18=2001-138=2001-W20-5-52048=2001-05-19=2001-139=2001-W20-6-52049=2001-05-20=2001-140=2001-W20-7-52050=2001-05-21=2001-141=2001-W21-1-52051=2001-05-22=2001-142=2001-W21-2-52052=2001-05-23=2001-143=2001-W21-3-52053=2001-05-24=2001-144=2001-W21-4-52054=2001-05-25=2001-145=2001-W21-5-52055=2001-05-26=2001-146=2001-W21-6-52056=2001-05-27=2001-147=2001-W21-7-52057=2001-05-28=2001-148=2001-W22-1-52058=2001-05-29=2001-149=2001-W22-2-52059=2001-05-30=2001-150=2001-W22-3-52060=2001-05-31=2001-151=2001-W22-4-52061=2001-06-01=2001-152=2001-W22-5-52062=2001-06-02=2001-153=2001-W22-6-52063=2001-06-03=2001-154=2001-W22-7-52064=2001-06-04=2001-155=2001-W23-1-52065=2001-06-05=2001-156=2001-W23-2-52066=2001-06-06=2001-157=2001-W23-3-52067=2001-06-07=2001-158=2001-W23-4-52068=2001-06-08=2001-159=2001-W23-5-52069=2001-06-09=2001-160=2001-W23-6-52070=2001-06-10=2001-161=2001-W23-7-52071=2001-06-11=2001-162=2001-W24-1-52072=2001-06-12=2001-163=2001-W24-2-52073=2001-06-13=2001-164=2001-W24-3-52074=2001-06-14=2001-165=2001-W24-4-52075=2001-06-15=2001-166=2001-W24-5-52076=2001-06-16=2001-167=2001-W24-6-52077=2001-06-17=2001-168=2001-W24-7-52078=2001-06-18=2001-169=2001-W25-1-52079=2001-06-19=2001-170=2001-W25-2-52080=2001-06-20=2001-171=2001-W25-3-52081=2001-06-21=2001-172=2001-W25-4-52082=2001-06-22=2001-173=2001-W25-5-52083=2001-06-23=2001-174=2001-W25-6-52084=2001-06-24=2001-175=2001-W25-7-52085=2001-06-25=2001-176=2001-W26-1-52086=2001-06-26=2001-177=2001-W26-2-52087=2001-06-27=2001-178=2001-W26-3-52088=2001-06-28=2001-179=2001-W26-4-52089=2001-06-29=2001-180=2001-W26-5-52090=2001-06-30=2001-181=2001-W26-6-52091=2001-07-01=2001-182=2001-W26-7-52092=2001-07-02=2001-183=2001-W27-1-52093=2001-07-03=2001-184=2001-W27-2-52094=2001-07-04=2001-185=2001-W27-3-52095=2001-07-05=2001-186=2001-W27-4-52096=2001-07-06=2001-187=2001-W27-5-52097=2001-07-07=2001-188=2001-W27-6-52098=2001-07-08=2001-189=2001-W27-7-52099=2001-07-09=2001-190=2001-W28-1-52100=2001-07-10=2001-191=2001-W28-2-52101=2001-07-11=2001-192=2001-W28-3-52102=2001-07-12=2001-193=2001-W28-4-52103=2001-07-13=2001-194=2001-W28-5-52104=2001-07-14=2001-195=2001-W28-6-52105=2001-07-15=2001-196=2001-W28-7-52106=2001-07-16=2001-197=2001-W29-1-52107=2001-07-17=2001-198=2001-W29-2-52108=2001-07-18=2001-199=2001-W29-3-52109=2001-07-19=2001-200=2001-W29-4-52110=2001-07-20=2001-201=2001-W29-5-52111=2001-07-21=2001-202=2001-W29-6-52112=2001-07-22=2001-203=2001-W29-7-52113=2001-07-23=2001-204=2001-W30-1-52114=2001-07-24=2001-205=2001-W30-2-52115=2001-07-25=2001-206=2001-W30-3-52116=2001-07-26=2001-207=2001-W30-4-52117=2001-07-27=2001-208=2001-W30-5-52118=2001-07-28=2001-209=2001-W30-6-52119=2001-07-29=2001-210=2001-W30-7-52120=2001-07-30=2001-211=2001-W31-1-52121=2001-07-31=2001-212=2001-W31-2-52122=2001-08-01=2001-213=2001-W31-3-52123=2001-08-02=2001-214=2001-W31-4-52124=2001-08-03=2001-215=2001-W31-5-52125=2001-08-04=2001-216=2001-W31-6-52126=2001-08-05=2001-217=2001-W31-7-52127=2001-08-06=2001-218=2001-W32-1-52128=2001-08-07=2001-219=2001-W32-2-52129=2001-08-08=2001-220=2001-W32-3-52130=2001-08-09=2001-221=2001-W32-4-52131=2001-08-10=2001-222=2001-W32-5-52132=2001-08-11=2001-223=2001-W32-6-52133=2001-08-12=2001-224=2001-W32-7-52134=2001-08-13=2001-225=2001-W33-1-52135=2001-08-14=2001-226=2001-W33-2-52136=2001-08-15=2001-227=2001-W33-3-52137=2001-08-16=2001-228=2001-W33-4-52138=2001-08-17=2001-229=2001-W33-5-52139=2001-08-18=2001-230=2001-W33-6-52140=2001-08-19=2001-231=2001-W33-7-52141=2001-08-20=2001-232=2001-W34-1-52142=2001-08-21=2001-233=2001-W34-2-52143=2001-08-22=2001-234=2001-W34-3-52144=2001-08-23=2001-235=2001-W34-4-52145=2001-08-24=2001-236=2001-W34-5-52146=2001-08-25=2001-237=2001-W34-6-52147=2001-08-26=2001-238=2001-W34-7-52148=2001-08-27=2001-239=2001-W35-1-52149=2001-08-28=2001-240=2001-W35-2-52150=2001-08-29=2001-241=2001-W35-3-52151=2001-08-30=2001-242=2001-W35-4-52152=2001-08-31=2001-243=2001-W35-5-52153=2001-09-01=2001-244=2001-W35-6-52154=2001-09-02=2001-245=2001-W35-7-52155=2001-09-03=2001-246=2001-W36-1-52156=2001-09-04=2001-247=2001-W36-2-52157=2001-09-05=2001-248=2001-W36-3-52158=2001-09-06=2001-249=2001-W36-4-52159=2001-09-07=2001-250=2001-W36-5-52160=2001-09-08=2001-251=2001-W36-6-52161=2001-09-09=2001-252=2001-W36-7-52162=2001-09-10=2001-253=2001-W37-1-52163=2001-09-11=2001-254=2001-W37-2-52164=2001-09-12=2001-255=2001-W37-3-52165=2001-09-13=2001-256=2001-W37-4-52166=2001-09-14=2001-257=2001-W37-5-52167=2001-09-15=2001-258=2001-W37-6-52168=2001-09-16=2001-259=2001-W37-7-52169=2001-09-17=2001-260=2001-W38-1-52170=2001-09-18=2001-261=2001-W38-2-52171=2001-09-19=2001-262=2001-W38-3-52172=2001-09-20=2001-263=2001-W38-4-52173=2001-09-21=2001-264=2001-W38-5-52174=2001-09-22=2001-265=2001-W38-6-52175=2001-09-23=2001-266=2001-W38-7-52176=2001-09-24=2001-267=2001-W39-1-52177=2001-09-25=2001-268=2001-W39-2-52178=2001-09-26=2001-269=2001-W39-3-52179=2001-09-27=2001-270=2001-W39-4-52180=2001-09-28=2001-271=2001-W39-5-52181=2001-09-29=2001-272=2001-W39-6-52182=2001-09-30=2001-273=2001-W39-7-52183=2001-10-01=2001-274=2001-W40-1-52184=2001-10-02=2001-275=2001-W40-2-52185=2001-10-03=2001-276=2001-W40-3-52186=2001-10-04=2001-277=2001-W40-4-52187=2001-10-05=2001-278=2001-W40-5-52188=2001-10-06=2001-279=2001-W40-6-52189=2001-10-07=2001-280=2001-W40-7-52190=2001-10-08=2001-281=2001-W41-1-52191=2001-10-09=2001-282=2001-W41-2-52192=2001-10-10=2001-283=2001-W41-3-52193=2001-10-11=2001-284=2001-W41-4-52194=2001-10-12=2001-285=2001-W41-5-52195=2001-10-13=2001-286=2001-W41-6-52196=2001-10-14=2001-287=2001-W41-7-52197=2001-10-15=2001-288=2001-W42-1-52198=2001-10-16=2001-289=2001-W42-2-52199=2001-10-17=2001-290=2001-W42-3-52200=2001-10-18=2001-291=2001-W42-4-52201=2001-10-19=2001-292=2001-W42-5-52202=2001-10-20=2001-293=2001-W42-6-52203=2001-10-21=2001-294=2001-W42-7-52204=2001-10-22=2001-295=2001-W43-1-52205=2001-10-23=2001-296=2001-W43-2-52206=2001-10-24=2001-297=2001-W43-3-52207=2001-10-25=2001-298=2001-W43-4-52208=2001-10-26=2001-299=2001-W43-5-52209=2001-10-27=2001-300=2001-W43-6-52210=2001-10-28=2001-301=2001-W43-7-52211=2001-10-29=2001-302=2001-W44-1-52212=2001-10-30=2001-303=2001-W44-2-52213=2001-10-31=2001-304=2001-W44-3-52214=2001-11-01=2001-305=2001-W44-4-52215=2001-11-02=2001-306=2001-W44-5-52216=2001-11-03=2001-307=2001-W44-6-52217=2001-11-04=2001-308=2001-W44-7-52218=2001-11-05=2001-309=2001-W45-1-52219=2001-11-06=2001-310=2001-W45-2-52220=2001-11-07=2001-311=2001-W45-3-52221=2001-11-08=2001-312=2001-W45-4-52222=2001-11-09=2001-313=2001-W45-5-52223=2001-11-10=2001-314=2001-W45-6-52224=2001-11-11=2001-315=2001-W45-7-52225=2001-11-12=2001-316=2001-W46-1-52226=2001-11-13=2001-317=2001-W46-2-52227=2001-11-14=2001-318=2001-W46-3-52228=2001-11-15=2001-319=2001-W46-4-52229=2001-11-16=2001-320=2001-W46-5-52230=2001-11-17=2001-321=2001-W46-6-52231=2001-11-18=2001-322=2001-W46-7-52232=2001-11-19=2001-323=2001-W47-1-52233=2001-11-20=2001-324=2001-W47-2-52234=2001-11-21=2001-325=2001-W47-3-52235=2001-11-22=2001-326=2001-W47-4-52236=2001-11-23=2001-327=2001-W47-5-52237=2001-11-24=2001-328=2001-W47-6-52238=2001-11-25=2001-329=2001-W47-7-52239=2001-11-26=2001-330=2001-W48-1-52240=2001-11-27=2001-331=2001-W48-2-52241=2001-11-28=2001-332=2001-W48-3-52242=2001-11-29=2001-333=2001-W48-4-52243=2001-11-30=2001-334=2001-W48-5-52244=2001-12-01=2001-335=2001-W48-6-52245=2001-12-02=2001-336=2001-W48-7-52246=2001-12-03=2001-337=2001-W49-1-52247=2001-12-04=2001-338=2001-W49-2-52248=2001-12-05=2001-339=2001-W49-3-52249=2001-12-06=2001-340=2001-W49-4-52250=2001-12-07=2001-341=2001-W49-5-52251=2001-12-08=2001-342=2001-W49-6-52252=2001-12-09=2001-343=2001-W49-7-52253=2001-12-10=2001-344=2001-W50-1-52254=2001-12-11=2001-345=2001-W50-2-52255=2001-12-12=2001-346=2001-W50-3-52256=2001-12-13=2001-347=2001-W50-4-52257=2001-12-14=2001-348=2001-W50-5-52258=2001-12-15=2001-349=2001-W50-6-52259=2001-12-16=2001-350=2001-W50-7-52260=2001-12-17=2001-351=2001-W51-1-52261=2001-12-18=2001-352=2001-W51-2-52262=2001-12-19=2001-353=2001-W51-3-52263=2001-12-20=2001-354=2001-W51-4-52264=2001-12-21=2001-355=2001-W51-5-52265=2001-12-22=2001-356=2001-W51-6-52266=2001-12-23=2001-357=2001-W51-7-52267=2001-12-24=2001-358=2001-W52-1-52268=2001-12-25=2001-359=2001-W52-2-52269=2001-12-26=2001-360=2001-W52-3-52270=2001-12-27=2001-361=2001-W52-4-52271=2001-12-28=2001-362=2001-W52-5-52272=2001-12-29=2001-363=2001-W52-6-52273=2001-12-30=2001-364=2001-W52-7-52274=2001-12-31=2001-365=2002-W01-1-52275=2002-01-01=2002-001=2002-W01-2-52276=2002-01-02=2002-002=2002-W01-3-52277=2002-01-03=2002-003=2002-W01-4-52278=2002-01-04=2002-004=2002-W01-5-52279=2002-01-05=2002-005=2002-W01-6-52280=2002-01-06=2002-006=2002-W01-7--51178=1998-12-31=1998-365=1998-W53-4-1998-12-31 23:59:60.5-51178,86400.5s-1998-12-31 15:59:60.5-51178,86400.5s--2000-03-01 00:00:00-2000-03-01 12:00:00-2000-02-29 16:00:00-2000-03-01 04:00:00-2000-03-01 08:00:00-2000-03-01 20:00:00--12:34:56.789-12:34:56.789123-12:34:56.789123456-12:34:56.789123456789
− test/TimeZone.hs
@@ -1,10 +0,0 @@-{-# OPTIONS -Wall -Werror #-}--module Main where--import Data.Time--main :: IO ()-main = do- zone <- getCurrentTimeZone- putStrLn (timeZoneOffsetString zone)
− test/UseCases.lhs
@@ -1,83 +0,0 @@-> module UseCases where-> import Data.Time.Calendar.OrdinalDate-> import Data.Time-> import System.Locale---From Brian Smith:-<http://www.haskell.org/pipermail/libraries/2005-July/004060.html>--Use cases (primarily taken from real-world corporate IT applications I have -developed) :--* What is the equivalent (or closest aproximation) of the SQL DateTime type -(date and time without any timezone information)? What is the equivalent of -the SQL Date type (date without any timezone information)?--> type SQLDateTime = LocalTime-> type SQLDate = Day--* The user enters a date as "7/4/2005." How do I determine if this date is -before or after July 1st of this year?--TODO: Parsing--* How do I present the date "July 1st of this year" to the user in M/D/YYYY -format?--> july1st = do-> now <- getZonedTime-> let (thisYear,_,_) = toGregorian (localDay (zonedTimeToLocalTime now))-> let day = fromGregorian thisYear 7 1-> return (formatTime defaultTimeLocale "%m/%d/%Y" day)--This actually gives "07/01/2005" rather than "7/1/2005".-ISSUE: Should I make additional %-codes for this?---* How do I truncate a datetime to midnight of the same day? How do I -truncate a date to the first of the month? How do I truncate a date to the -first day of the year it occurred in?--> truncateToMidnight (LocalTime day _) = (LocalTime day midnight)--> truncateToFirstOfMonth day = fromGregorian y m 1 where-> (y,m,_) = toGregorian day--> truncateToJan1st day = fromOrdinalDate y 1 where-> (y,_) = toOrdinalDate day--* Given a date X, how do I find the last day of the month that X occurs in. -For example, If X is July 4th, 2005, then I want the result to be July 31st, -2005. If X is Februrary 5, then I want the result to be Februrary 28 for -non-leap-years and February 29 for leap years.--> lastDayOfMonth day = fromGregorian y m (gregorianMonthLength y m) where-> (y,m,_) = toGregorian day--* The user enters a time T with no date, e.g. "17:30". How do I merge this -time onto a date D (e.g. July 4, 2005), so that the result has is a datetime -with date D and the time T (July 4, 2005 at 17:30).--> mergeDateAndTime = LocalTime--* Given two datetimes T1, T2, how do I determine if they are on the same -date?--> sameDay (LocalTime d1 _) (LocalTime d2 _) = d1 == d2---From Simon Marlow:-<http://www.haskell.org/pipermail/libraries/2005-July/004066.html>--I just had a little look around, mainly at System.Time.Calendar. I-think the structure is rather complicated - I wanted to find out how to-get a CalendarTime for "this time tomorrow", and ended up with this:--*System.Time.Calendar> let c' =-c{ztTime=zttime{dtDay=dtday{gregDay=day+1}}} where { zttime = ztTime c;-dtday = dtDay zttime; day = gregDay dtday }--> thisTimeTomorrow (ZonedTime (LocalTime day tod) zone) = (ZonedTime (LocalTime (addDays 1 day) tod) zone)--
− test/tai-utc.dat
@@ -1,37 +0,0 @@- 1961 JAN 1 =JD 2437300.5 TAI-UTC= 1.4228180 S + (MJD - 37300.) X 0.001296 S- 1961 AUG 1 =JD 2437512.5 TAI-UTC= 1.3728180 S + (MJD - 37300.) X 0.001296 S- 1962 JAN 1 =JD 2437665.5 TAI-UTC= 1.8458580 S + (MJD - 37665.) X 0.0011232S- 1963 NOV 1 =JD 2438334.5 TAI-UTC= 1.9458580 S + (MJD - 37665.) X 0.0011232S- 1964 JAN 1 =JD 2438395.5 TAI-UTC= 3.2401300 S + (MJD - 38761.) X 0.001296 S- 1964 APR 1 =JD 2438486.5 TAI-UTC= 3.3401300 S + (MJD - 38761.) X 0.001296 S- 1964 SEP 1 =JD 2438639.5 TAI-UTC= 3.4401300 S + (MJD - 38761.) X 0.001296 S- 1965 JAN 1 =JD 2438761.5 TAI-UTC= 3.5401300 S + (MJD - 38761.) X 0.001296 S- 1965 MAR 1 =JD 2438820.5 TAI-UTC= 3.6401300 S + (MJD - 38761.) X 0.001296 S- 1965 JUL 1 =JD 2438942.5 TAI-UTC= 3.7401300 S + (MJD - 38761.) X 0.001296 S- 1965 SEP 1 =JD 2439004.5 TAI-UTC= 3.8401300 S + (MJD - 38761.) X 0.001296 S- 1966 JAN 1 =JD 2439126.5 TAI-UTC= 4.3131700 S + (MJD - 39126.) X 0.002592 S- 1968 FEB 1 =JD 2439887.5 TAI-UTC= 4.2131700 S + (MJD - 39126.) X 0.002592 S- 1972 JAN 1 =JD 2441317.5 TAI-UTC= 10.0 S + (MJD - 41317.) X 0.0 S- 1972 JUL 1 =JD 2441499.5 TAI-UTC= 11.0 S + (MJD - 41317.) X 0.0 S- 1973 JAN 1 =JD 2441683.5 TAI-UTC= 12.0 S + (MJD - 41317.) X 0.0 S- 1974 JAN 1 =JD 2442048.5 TAI-UTC= 13.0 S + (MJD - 41317.) X 0.0 S- 1975 JAN 1 =JD 2442413.5 TAI-UTC= 14.0 S + (MJD - 41317.) X 0.0 S- 1976 JAN 1 =JD 2442778.5 TAI-UTC= 15.0 S + (MJD - 41317.) X 0.0 S- 1977 JAN 1 =JD 2443144.5 TAI-UTC= 16.0 S + (MJD - 41317.) X 0.0 S- 1978 JAN 1 =JD 2443509.5 TAI-UTC= 17.0 S + (MJD - 41317.) X 0.0 S- 1979 JAN 1 =JD 2443874.5 TAI-UTC= 18.0 S + (MJD - 41317.) X 0.0 S- 1980 JAN 1 =JD 2444239.5 TAI-UTC= 19.0 S + (MJD - 41317.) X 0.0 S- 1981 JUL 1 =JD 2444786.5 TAI-UTC= 20.0 S + (MJD - 41317.) X 0.0 S- 1982 JUL 1 =JD 2445151.5 TAI-UTC= 21.0 S + (MJD - 41317.) X 0.0 S- 1983 JUL 1 =JD 2445516.5 TAI-UTC= 22.0 S + (MJD - 41317.) X 0.0 S- 1985 JUL 1 =JD 2446247.5 TAI-UTC= 23.0 S + (MJD - 41317.) X 0.0 S- 1988 JAN 1 =JD 2447161.5 TAI-UTC= 24.0 S + (MJD - 41317.) X 0.0 S- 1990 JAN 1 =JD 2447892.5 TAI-UTC= 25.0 S + (MJD - 41317.) X 0.0 S- 1991 JAN 1 =JD 2448257.5 TAI-UTC= 26.0 S + (MJD - 41317.) X 0.0 S- 1992 JUL 1 =JD 2448804.5 TAI-UTC= 27.0 S + (MJD - 41317.) X 0.0 S- 1993 JUL 1 =JD 2449169.5 TAI-UTC= 28.0 S + (MJD - 41317.) X 0.0 S- 1994 JUL 1 =JD 2449534.5 TAI-UTC= 29.0 S + (MJD - 41317.) X 0.0 S- 1996 JAN 1 =JD 2450083.5 TAI-UTC= 30.0 S + (MJD - 41317.) X 0.0 S- 1997 JUL 1 =JD 2450630.5 TAI-UTC= 31.0 S + (MJD - 41317.) X 0.0 S- 1999 JAN 1 =JD 2451179.5 TAI-UTC= 32.0 S + (MJD - 41317.) X 0.0 S- 2006 JAN 1 =JD 2453736.5 TAI-UTC= 33.0 S + (MJD - 41317.) X 0.0 S
time.cabal view
@@ -1,5 +1,5 @@ name: time-version: 1.4.0.1+version: 1.4.0.2 stability: stable license: BSD3 license-file: LICENSE@@ -9,8 +9,8 @@ synopsis: A time library description: A time library category: System-build-type: Custom-cabal-version: >=1.6+build-type: Configure+cabal-version: >=1.14 x-follows-version-policy: extra-source-files:@@ -20,29 +20,36 @@ include/HsConfigure.h include/HsTime.h include/HsTimeConfig.h.in- test/Makefile- test/*.hs- test/*.lhs- test/*.ref- test/*.dat- test/*.c- test/*.h+ Test/*.hs+ Test/*.lhs+ Test/*.c+ Test/*.h extra-tmp-files: config.log config.status autom4te.cache include/HsTimeConfig.h +source-repository head+ type: darcs+ location: http://code.haskell.org/time/+ library-{- build-depends: base == 4.*, deepseq >= 1.1, old-locale+ build-depends: + base >= 4 && < 5,+ deepseq >= 1.1,+ old-locale ghc-options: -Wall+ default-language: Haskell2010 if impl(ghc)- extensions: Rank2Types DeriveDataTypeable StandaloneDeriving+ default-extensions: + Rank2Types + DeriveDataTypeable + StandaloneDeriving cpp-options: -DLANGUAGE_Rank2Types -DLANGUAGE_DeriveDataTypeable -DLANGUAGE_StandaloneDeriving else if impl(hugs)- extensions: Rank2Types+ default-extensions: Rank2Types cpp-options: -DLANGUAGE_Rank2Types if os(windows) build-depends: Win32@@ -59,7 +66,7 @@ Data.Time.LocalTime, Data.Time.Format, Data.Time- extensions: ForeignFunctionInterface, CPP+ default-extensions: CPP c-sources: cbits/HsTime.c other-modules: Data.Time.Calendar.Private,@@ -82,5 +89,79 @@ install-includes: HsTime.h HsTimeConfig.h-} +test-suite tests+ type: exitcode-stdio-1.0+ default-language: Haskell2010+ default-extensions: + Rank2Types+ CPP+ DeriveDataTypeable+ StandaloneDeriving+ ExistentialQuantification+ MultiParamTypeClasses+ FlexibleInstances+ UndecidableInstances+ ScopedTypeVariables+ cpp-options: -DLANGUAGE_Rank2Types -DLANGUAGE_DeriveDataTypeable -DLANGUAGE_StandaloneDeriving+ ghc-options: -Wall+ c-sources: cbits/HsTime.c Test/TestFormatStuff.c+ include-dirs: include+ build-depends: + base,+ deepseq,+ Cabal >= 1.16,+ old-locale,+ process,+ QuickCheck >= 2.5.1,+ test-framework >= 0.6.1,+ test-framework-quickcheck2 >= 0.2.12+ main-is: Test.hs+ other-modules:+ Test.Tests+ Test.TestTime+ Test.TestTimeRef+ Test.TestParseDAT+ Test.TAI_UTC_DAT+ Test.TestParseDAT_Ref+ Test.TestParseTime+ Test.TestMonthDay+ Test.TestMonthDayRef+ Test.TestFormat+ Test.TestEaster+ Test.TestEasterRef+ Test.TestCalendars+ Test.TestCalendarsRef+ Test.LongWeekYears+ Test.LongWeekYearsRef+ Test.ConvertBack+ Test.ClipDates+ Test.ClipDatesRef+ Test.AddDays+ Test.AddDaysRef+ Test.TestUtil++ Data.Time.Calendar.Private,+ Data.Time.Calendar.Days,+ Data.Time.Calendar.Gregorian,+ Data.Time.Calendar.JulianYearDay,+ Data.Time.Clock.Scale,+ Data.Time.Clock.UTC,+ Data.Time.Clock.CTimeval,+ Data.Time.Clock.UTCDiff,+ Data.Time.LocalTime.TimeZone,+ Data.Time.LocalTime.TimeOfDay,+ Data.Time.LocalTime.LocalTime,+ Data.Time.Format.Parse+ Data.Time.Calendar,+ Data.Time.Calendar.MonthDay,+ Data.Time.Calendar.OrdinalDate,+ Data.Time.Calendar.WeekDate,+ Data.Time.Calendar.Julian,+ Data.Time.Calendar.Easter,+ Data.Time.Clock,+ Data.Time.Clock.POSIX,+ Data.Time.Clock.TAI,+ Data.Time.LocalTime,+ Data.Time.Format,+ Data.Time