[commit: packages/time] master: add ShowDST test program (445ae81)

git at git.haskell.org git at git.haskell.org
Fri Jan 23 22:53:23 UTC 2015


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

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

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

commit 445ae81631df6ed4ab222f104783cddd2d3e4737
Author: Ashley Yakeley <ashley at semantic.org>
Date:   Thu Apr 28 03:12:16 2005 -0700

    add ShowDST test program
    
    darcs-hash:20050428101216-ac6dd-b195b5ad2f9d60f5ad650762d377d465f535a991


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

445ae81631df6ed4ab222f104783cddd2d3e4737
 Makefile   |  7 ++++++-
 ShowDST.hs | 42 ++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 48 insertions(+), 1 deletion(-)

diff --git a/Makefile b/Makefile
index 44f6935..46f48b9 100644
--- a/Makefile
+++ b/Makefile
@@ -1,4 +1,4 @@
-default: TestFixed.diff CurrentTime.run TestTime.diff TimeZone.diff doc
+default: test doc CurrentTime.run ShowDST.run
 
 SRCS = Data/Fixed.hs System/Time/Clock.hs System/Time/TAI.hs System/Time/Calendar.hs
 
@@ -11,6 +11,9 @@ TestTime: TestTime.o libTimeLib.a
 CurrentTime: CurrentTime.o libTimeLib.a
 	ghc $^ -o $@
 
+ShowDST: ShowDST.o libTimeLib.a
+	ghc $^ -o $@
+
 TimeZone: TimeZone.o libTimeLib.a
 	ghc $^ -o $@
 
@@ -25,6 +28,8 @@ libTimeLib.a: $(patsubst %.hs,%.o,$(SRCS)) timestuff.o
 	ar cru $@ $^
 	ranlib $@
 
+test: TestFixed.diff TestTime.diff TimeZone.diff
+
 clean:
 	rm -rf TimeZone TimeZone.ref CurrentTime TestTime TestFixed doc haddock *.out *.a *.o *.hi $(patsubst %.hs,%.o,$(SRCS)) $(patsubst %.hs,%.hi,$(SRCS)) Makefile.bak
 
diff --git a/ShowDST.hs b/ShowDST.hs
new file mode 100644
index 0000000..7b2dda1
--- /dev/null
+++ b/ShowDST.hs
@@ -0,0 +1,42 @@
+module Main where
+
+import System.Time.Clock
+import System.Time.Calendar
+
+monthBeginning :: Timezone -> Integer -> Int -> UTCTime
+monthBeginning zone year month = calendarToUTC zone
+	(CalendarTime (CalendarDay 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 (utcToCalendar zone time)) ++ " " ++ (show zone)
+
+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 = cdYear (ctDay (utcToCalendar 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)



More information about the ghc-commits mailing list