time 1.2.0.1 → 1.2.0.2
raw patch · 28 files changed
+3839/−1 lines, 28 files
Files
- test/AddDays.hs +41/−0
- test/AddDays.ref +245/−0
- test/ClipDates.hs +26/−0
- test/ClipDates.ref +561/−0
- test/ConvertBack.hs +36/−0
- test/CurrentTime.hs +13/−0
- test/LongWeekYears.hs +18/−0
- test/LongWeekYears.ref +150/−0
- test/Makefile +102/−0
- test/ShowDST.hs +43/−0
- test/TestCalendars.hs +29/−0
- test/TestCalendars.ref +4/−0
- test/TestEaster.hs +23/−0
- test/TestEaster.ref +57/−0
- test/TestFormat.hs +101/−0
- test/TestFormatStuff.c +15/−0
- test/TestFormatStuff.h +6/−0
- test/TestMonthDay.hs +20/−0
- test/TestMonthDay.ref +746/−0
- test/TestParseDAT.hs +62/−0
- test/TestParseDAT.ref +90/−0
- test/TestParseTime.hs +357/−0
- test/TestTime.hs +87/−0
- test/TestTime.ref +869/−0
- test/TimeZone.hs +10/−0
- test/UseCases.lhs +83/−0
- test/tai-utc.dat +37/−0
- time.cabal +8/−1
+ test/AddDays.hs view
@@ -0,0 +1,41 @@+{-# 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 view
@@ -0,0 +1,245 @@+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,26 @@+{-# 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 view
@@ -0,0 +1,561 @@+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,36 @@+{-# 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 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,18 @@+{-# 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 view
@@ -0,0 +1,150 @@+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 view
@@ -0,0 +1,102 @@+GHC = ghc+GHCFLAGS = -package time++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) -package QuickCheck $^ -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++clean:+ rm -rf TestMonthDay ConvertBack TestCalendars TestTime LongWeekYears ClipDates \+ AddDays TestFormat TestParseDAT TestEaster CurrentTime ShowDST TimeZone TimeZone.ref TestParseTime \+ *.out *.o *.hi Makefile.bak++%.diff: %.ref %.out+ diff -u $^++%.diff0: %.out+ echo -n | diff -u - $^++%.out: %+ ./$< > $@++%.run: %+ ./$<++%.hi: %.o+ @:++%.o: %.hs+ $(GHC) $(GHCFLAGS) -c $< -o $@++%.o: %.lhs+ $(GHC) $(GHCFLAGS) -c $< -o $@++FORCE:++.SECONDARY:++# TestTime.o TestFormat.o CurrentTime.o ShowDST.o TimeZone.o: $(patsubst %.hs,%.hi,$(SRCS))++TestFixed.o: ../Data/Fixed.hi
+ 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/TestCalendars.hs view
@@ -0,0 +1,29 @@+{-# 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 view
@@ -0,0 +1,4 @@+ == 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,23 @@+{-# 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 view
@@ -0,0 +1,57 @@+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,101 @@+{-# 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++{-+ 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)+++main :: IO ()+main = + 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 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,20 @@+{-# 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 view
@@ -0,0 +1,746 @@+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,62 @@+{-# 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 view
@@ -0,0 +1,90 @@+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,357 @@+{-# OPTIONS -Wall -Werror -fno-warn-type-defaults -fno-warn-unused-binds -fno-warn-orphans #-}++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+++ntest :: Int+ntest = 1000++main :: IO ()+main = do putStrLn "Should work:"+ checkAll properties+ putStrLn "Known failures:"+ checkAll knownFailures++checkAll :: [NamedProperty] -> IO ()+checkAll ps = mapM_ (checkOne config) ps+ where config = defaultConfig { configMaxTest = ntest }+ +checkOne :: Config -> NamedProperty -> IO ()+checkOne config (n,p) = + do putStr (rpad 65 ' ' n)+ check config p+ 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 view
@@ -0,0 +1,87 @@+{-# 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)))++main :: IO ()+main = do+ testCal+ testUTC+ testUT1
+ test/TestTime.ref view
@@ -0,0 +1,869 @@+-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
+ 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)++
+ test/tai-utc.dat view
@@ -0,0 +1,37 @@+ 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.2.0.1+version: 1.2.0.2 stability: stable license: BSD3 license-file: LICENSE@@ -20,6 +20,13 @@ include/HsConfigure.h include/HsTime.h include/HsTimeConfig.h.in+ test/Makefile+ test/*.hs+ test/*.lhs+ test/*.ref+ test/*.dat+ test/*.c+ test/*.h extra-tmp-files: config.log config.status