[commit: packages/time] master: fix week-based formatting chars, with more testing (f61178d)

git at git.haskell.org git at git.haskell.org
Sun Dec 20 07:47:01 UTC 2015


Repository : ssh://git@git.haskell.org/time

On branch  : master
Link       : http://git.haskell.org/packages/time.git/commitdiff/f61178de5671ebf0006c0a9500f2b0f0d84da152

>---------------------------------------------------------------

commit f61178de5671ebf0006c0a9500f2b0f0d84da152
Author: Ashley Yakeley <ashley at semantic.org>
Date:   Tue May 10 03:33:55 2005 -0700

    fix week-based formatting chars, with more testing
    
    darcs-hash:20050510103355-ac6dd-319f78ca2b58fb5a381a9882cfa9727f3bfa465d


>---------------------------------------------------------------

f61178de5671ebf0006c0a9500f2b0f0d84da152
 System/Time/Calendar/Format.hs | 13 ++++++++-----
 test/TestFormat.hs             | 14 ++++++--------
 2 files changed, 14 insertions(+), 13 deletions(-)

diff --git a/System/Time/Calendar/Format.hs b/System/Time/Calendar/Format.hs
index eba951f..a3f08d3 100644
--- a/System/Time/Calendar/Format.hs
+++ b/System/Time/Calendar/Format.hs
@@ -79,14 +79,17 @@ weekDay day = fromInteger (mod (day + 3) 7)
 weekDay' :: ModJulianDay -> Int
 weekDay' day = weekDay (day - 1) + 1
 
-dayOfYear :: ModJulianDay -> Int
-dayOfYear = ydDay . encodeDay
-
 weekNumber :: ModJulianDay -> Int
-weekNumber day = (div (dayOfYear day) 7) + 1
+weekNumber mjd = fromInteger ((div d 7) - (div k 7)) where
+	yd = ydDay (encodeDay mjd)
+	d = mjd + 3
+	k = d - (toInteger yd)
 
 weekNumber' :: ModJulianDay -> Int
-weekNumber' day = (div (dayOfYear day) 7) + 1
+weekNumber' mjd = fromInteger ((div d 7) - (div k 7)) where
+	yd = ydDay (encodeDay mjd)
+	d = mjd + 2
+	k = d - (toInteger yd)
 
 instance FormatTime ModJulianDay where
 	-- Aggregate
diff --git a/test/TestFormat.hs b/test/TestFormat.hs
index 651df97..89ed600 100644
--- a/test/TestFormat.hs
+++ b/test/TestFormat.hs
@@ -65,7 +65,8 @@ getYearP4 :: Integer -> UTCTime
 getYearP4 year = decodeLocalUTC utc (CalendarTime (GregorianDay year 12 31) midnight)
 
 times :: [UTCTime]
-times = [baseTime0] ++ (fmap getDay [0..23])
+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 -> Timezone -> UTCTime -> IO ()
 compareFormat fmt zone time = let
@@ -83,11 +84,8 @@ compareFormat fmt zone time = let
 chars :: [Char]
 chars = "aAbBcCdDeFgGhHIjklmMnprRStTuUVwWxXyYzZ%"
 
+formats :: [String]
+formats =  ["%G-W%V-%u","%U-%w","%W-%u"] ++ (fmap (\char -> '%':char:[]) chars)
+
 main :: IO ()
-main = do
-	mapM_ (\day -> compareFormat "%G-W%V-%u" utc (getDay day)) [0..100]
-	mapM_ (\year -> compareFormat "%G-W%V-%u" utc (getYearP1 year)) [1980..2000]
-	mapM_ (\year -> compareFormat "%G-W%V-%u" utc (getYearP2 year)) [1980..2000]
-	mapM_ (\year -> compareFormat "%G-W%V-%u" utc (getYearP3 year)) [1980..2000]
-	mapM_ (\year -> compareFormat "%G-W%V-%u" utc (getYearP4 year)) [1980..2000]
-	mapM_ (\char -> let fmt = '%':char:[] in mapM_ (\time -> mapM_ (\zone -> compareFormat fmt zone time) zones) times) chars
+main = mapM_ (\fmt -> mapM_ (\time -> mapM_ (\zone -> compareFormat fmt zone time) zones) times) formats



More information about the ghc-commits mailing list