[commit: packages/time] format-widths, improve-leapseconds, master, posix-perf, tasty, wip/travis: add GNU and other extensions to formatting (ce92c0a)

git at git.haskell.org git at git.haskell.org
Mon Feb 20 21:07:49 UTC 2017


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

On branches: format-widths,improve-leapseconds,master,posix-perf,tasty,wip/travis
Link       : http://git.haskell.org/packages/time.git/commitdiff/ce92c0a6f8d88ab2f1aa6de6dce271b1d790ce1b

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

commit ce92c0a6f8d88ab2f1aa6de6dce271b1d790ce1b
Author: Ashley Yakeley <ashley at semantic.org>
Date:   Sun May 1 05:08:16 2005 -0700

    add GNU and other extensions to formatting
    
    darcs-hash:20050501120816-ac6dd-b30e46bc30c5fae816095c2f154ea9cb5ee3c3f8


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

ce92c0a6f8d88ab2f1aa6de6dce271b1d790ce1b
 System/Time/Calendar/Gregorian.hs | 12 +++++++++---
 System/Time/Calendar/TimeOfDay.hs |  7 ++++++-
 TestFormat.hs                     |  3 ++-
 3 files changed, 17 insertions(+), 5 deletions(-)

diff --git a/System/Time/Calendar/Gregorian.hs b/System/Time/Calendar/Gregorian.hs
index 3d0dcce..b10c509 100644
--- a/System/Time/Calendar/Gregorian.hs
+++ b/System/Time/Calendar/Gregorian.hs
@@ -39,8 +39,11 @@ weekNumber day = (div (dayOfYear day) 7) + 1
 weekNumber' :: ModJulianDay -> Int
 weekNumber' day = (div (dayOfYear day) 7) + 1
 
-weekNumber'' :: ModJulianDay -> Int
-weekNumber'' day = (div (dayOfYear day) 7) + 1
+isoWeekFormat :: ModJulianDay -> (Integer,Int,Int)
+isoWeekFormat day = (y,div k 7,fromInteger (mod day 7) + 1) where
+	(year,yd,_) = dayToYearDay day
+	k = yd -- WRONG
+	y = year -- WRONG
 
 instance FormatTime GregorianDay where
 	formatCharacter locale 'a' day = Just (snd ((wDays locale) !! (weekDay (calendarToDay day))))
@@ -51,12 +54,15 @@ instance FormatTime GregorianDay where
 	formatCharacter _ 'd' (GregorianDay _ _ d) = Just (show2 d)
 	formatCharacter locale 'D' day = Just (formatTime locale "%m/%d/%y" day)
 	formatCharacter _ 'e' (GregorianDay _ _ d) = Just (show2Space d)
+	formatCharacter locale 'F' day = Just (formatTime locale "%Y-%m-%d" day)
+	formatCharacter _ 'g' day = let (y,_,_) = isoWeekFormat (calendarToDay day) in Just (show2 (fromInteger (mod y 100)))
+	formatCharacter _ 'G' day = let (y,_,_) = isoWeekFormat (calendarToDay day) in Just (show y)
 	formatCharacter locale 'h' (GregorianDay _ m _) = Just (snd ((months locale) !! (m - 1)))
 	formatCharacter _ 'j' day = Just (show3 (dayOfYear (calendarToDay day)))
 	formatCharacter _ 'm' (GregorianDay _ m _) = Just (show2 m)
 	formatCharacter _ 'u' day = Just (show (weekDay' (calendarToDay day)))
 	formatCharacter _ 'U' day = Just (show2 (weekNumber (calendarToDay day)))
-	formatCharacter _ 'V' day = Just (show2 (weekNumber'' (calendarToDay day)))
+	formatCharacter _ 'V' day = let (_,n,_) = isoWeekFormat (calendarToDay day) in Just (show2 n)
 	formatCharacter _ 'w' day = Just (show (weekDay (calendarToDay day)))
 	formatCharacter _ 'W' day = Just (show2 (weekNumber' (calendarToDay day)))
 	formatCharacter locale 'x' day = Just (formatTime locale (dateFmt locale) day)
diff --git a/System/Time/Calendar/TimeOfDay.hs b/System/Time/Calendar/TimeOfDay.hs
index 17cdc93..ba1c891 100644
--- a/System/Time/Calendar/TimeOfDay.hs
+++ b/System/Time/Calendar/TimeOfDay.hs
@@ -12,9 +12,11 @@ import System.Time.Calendar.Timezone
 import System.Time.Calendar.Format
 import System.Time.Calendar.Private
 import System.Time.Clock
-import System.Locale
 import Data.Fixed
 
+import System.Locale
+import Data.Char
+
 -- | time of day as represented in hour, minute and second (with picoseconds), typically used to express local time of day
 data TimeOfDay = TimeOfDay {
 	todHour    :: Int,
@@ -34,8 +36,11 @@ instance Show TimeOfDay where
 instance FormatTime TimeOfDay where
 	formatCharacter _ 'H' (TimeOfDay h _ _) = Just (show2 h)
 	formatCharacter _ 'I' (TimeOfDay h _ _) = Just (show2 ((mod (h - 1) 12) + 1))
+	formatCharacter _ 'k' (TimeOfDay h _ _) = Just (show2Space h)
+	formatCharacter _ 'l' (TimeOfDay h _ _) = Just (show2Space ((mod (h - 1) 12) + 1))
 	formatCharacter _ 'M' (TimeOfDay _ m _) = Just (show2 m)
 	formatCharacter locale 'p' (TimeOfDay h _ _) = Just ((if h < 12 then fst else snd) (amPm locale))
+	formatCharacter locale 'P' (TimeOfDay h _ _) = Just (map toLower ((if h < 12 then fst else snd) (amPm locale)))
 	formatCharacter locale 'r' time = Just (formatTime locale (time12Fmt locale) time)
 	formatCharacter locale 'R' time = Just (formatTime locale "%H:%M" time)
 	formatCharacter _ 'S' (TimeOfDay _ _ s) = Just (show2Fixed s)
diff --git a/TestFormat.hs b/TestFormat.hs
index 4d7f800..8534c77 100644
--- a/TestFormat.hs
+++ b/TestFormat.hs
@@ -45,8 +45,9 @@ times :: [UTCTime]
 times = [baseTime1,addUTCTime posixDay baseTime1,addUTCTime (2 * posixDay) baseTime1]
 
 -- as found in http://www.opengroup.org/onlinepubs/007908799/xsh/strftime.html
+-- plus FgGklPsz
 chars :: [Char]
-chars = "aAbBcCdDehHIjmMnprRStTuUVwWxXyYzZ%"
+chars = "aAbBcCdDeFgGhHIjklmMnpPrRsStTuUVwWxXyYzZ%"
 
 main :: IO ()
 main = mapM_ (\char -> let fmt = '%':char:[] in mapM_ (\time -> mapM_ (\zone -> let



More information about the ghc-commits mailing list