{-# LANGUAGE BangPatterns #-}{-# LANGUAGE CPP #-}moduleData.Time.ToText(buildDay ,buildLocalTime ,buildTimeOfDay ,buildTimeZone ,buildUTCTime ,buildZonedTime ,buildYear ,buildMonth ,buildQuarter ,buildQuarterOfYear ,)whereimportData.Char(chr)importData.Fixed(Fixed(..))importData.Int(Int64)importData.Text.Lazy.Builder(Builder)importData.Time(TimeOfDay(..))importData.Time.Calendar(Day,toGregorian)importData.Time.Calendar.Compat(Year)importData.Time.Calendar.Month.Compat(Month,toYearMonth)importData.Time.Calendar.Quarter.Compat(Quarter,QuarterOfYear(..),toYearQuarter)importData.Time.Clock(UTCTime(..))importqualifiedData.Text.Lazy.BuilderasBimportqualifiedData.Text.Lazy.Builder.IntasB(decimal)importqualifiedData.Time.LocalTimeasLocal
#if !MIN_VERSION_base(4,11,0)
importData.Semigroup((<>))
#endif
buildDay ::Day->BuilderbuildDay :: Day -> Builder
buildDay Day
dd =Year -> Builder
buildYear Year
yr Builder -> Builder -> Builder
forall a. Semigroup a => a -> a -> a
<>Char -> Builder
char7 Char
'-'Builder -> Builder -> Builder
forall a. Semigroup a => a -> a -> a
<>Int -> Builder
digits2 Int
m Builder -> Builder -> Builder
forall a. Semigroup a => a -> a -> a
<>Char -> Builder
char7 Char
'-'Builder -> Builder -> Builder
forall a. Semigroup a => a -> a -> a
<>Int -> Builder
digits2 Int
d where(Year
yr ,Int
m ,Int
d )=Day -> (Year, Int, Int)
toGregorianDay
dd {-# INLINEbuildDay #-}buildMonth ::Month->BuilderbuildMonth :: Month -> Builder
buildMonth Month
mm =Year -> Builder
buildYear Year
yr Builder -> Builder -> Builder
forall a. Semigroup a => a -> a -> a
<>Char -> Builder
char7 Char
'-'Builder -> Builder -> Builder
forall a. Semigroup a => a -> a -> a
<>Int -> Builder
digits2 Int
m where(Year
yr ,Int
m )=Month -> (Year, Int)
toYearMonthMonth
mm {-# INLINEbuildMonth #-}buildQuarter ::Quarter->BuilderbuildQuarter :: Quarter -> Builder
buildQuarter Quarter
qq =Year -> Builder
buildYear Year
yr Builder -> Builder -> Builder
forall a. Semigroup a => a -> a -> a
<>Char -> Builder
char7 Char
'-'Builder -> Builder -> Builder
forall a. Semigroup a => a -> a -> a
<>QuarterOfYear -> Builder
buildQuarterOfYear QuarterOfYear
q where(Year
yr ,QuarterOfYear
q )=Quarter -> (Year, QuarterOfYear)
toYearQuarterQuarter
qq {-# INLINEbuildQuarter #-}buildQuarterOfYear ::QuarterOfYear->BuilderbuildQuarterOfYear :: QuarterOfYear -> Builder
buildQuarterOfYear QuarterOfYear
q =Char -> Builder
char7 Char
'q'Builder -> Builder -> Builder
forall a. Semigroup a => a -> a -> a
<>caseQuarterOfYear
q ofQuarterOfYear
Q1->Char -> Builder
char7 Char
'1'QuarterOfYear
Q2->Char -> Builder
char7 Char
'2'QuarterOfYear
Q3->Char -> Builder
char7 Char
'3'QuarterOfYear
Q4->Char -> Builder
char7 Char
'4'-- | Used in encoding day, month, quarterbuildYear ::Year->BuilderbuildYear :: Year -> Builder
buildYear Year
y |Year
y Year -> Year -> Bool
forall a. Ord a => a -> a -> Bool
>=Year
1000=Year -> Builder
forall a. Integral a => a -> Builder
B.decimalYear
y |Year
y Year -> Year -> Bool
forall a. Ord a => a -> a -> Bool
>=Year
0=Year -> Builder
forall a. Integral a => a -> Builder
padYear Year
y |Year
y Year -> Year -> Bool
forall a. Ord a => a -> a -> Bool
>=-Year
999=Char -> Builder
char7 Char
'-'Builder -> Builder -> Builder
forall a. Semigroup a => a -> a -> a
<>Year -> Builder
forall a. Integral a => a -> Builder
padYear (Year -> Year
forall a. Num a => a -> a
negateYear
y )|Bool
otherwise=Year -> Builder
forall a. Integral a => a -> Builder
B.decimalYear
y wherepadYear :: p -> Builder
padYear p
y' =let(Int
ab ,Int
c )=p -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegralp
y' Int -> Int -> (Int, Int)
forall a. Integral a => a -> a -> (a, a)
`quotRem`Int
10(Int
a ,Int
b )=Int
ab Int -> Int -> (Int, Int)
forall a. Integral a => a -> a -> (a, a)
`quotRem`Int
10inChar -> Builder
char7 Char
'0'Builder -> Builder -> Builder
forall a. Semigroup a => a -> a -> a
<>Int -> Builder
digit Int
a Builder -> Builder -> Builder
forall a. Semigroup a => a -> a -> a
<>Int -> Builder
digit Int
b Builder -> Builder -> Builder
forall a. Semigroup a => a -> a -> a
<>Int -> Builder
digit Int
c {-# INLINEbuildYear #-}buildTimeOfDay ::TimeOfDay->BuilderbuildTimeOfDay :: TimeOfDay -> Builder
buildTimeOfDay (TimeOfDayInt
h Int
m (MkFixedYear
s ))=Int -> Builder
digits2 Int
h Builder -> Builder -> Builder
forall a. Semigroup a => a -> a -> a
<>Char -> Builder
char7 Char
':'Builder -> Builder -> Builder
forall a. Semigroup a => a -> a -> a
<>Int -> Builder
digits2 Int
m Builder -> Builder -> Builder
forall a. Semigroup a => a -> a -> a
<>Char -> Builder
char7 Char
':'Builder -> Builder -> Builder
forall a. Semigroup a => a -> a -> a
<>Int -> Builder
digits2 (Year -> Int
forall a. Num a => Year -> a
fromIntegerYear
real )Builder -> Builder -> Builder
forall a. Semigroup a => a -> a -> a
<>Int64 -> Builder
buildFrac (Year -> Int64
forall a. Num a => Year -> a
fromIntegerYear
frac )where(Year
real ,Year
frac )=Year
s Year -> Year -> (Year, Year)
forall a. Integral a => a -> a -> (a, a)
`quotRem`Year
pico buildFrac ::Int64->BuilderbuildFrac :: Int64 -> Builder
buildFrac Int64
0=Builder
forall a. Monoid a => a
memptybuildFrac Int64
i =Char -> Builder
char7 Char
'.'Builder -> Builder -> Builder
forall a. Semigroup a => a -> a -> a
<>caseInt64
i Int64 -> Int64 -> (Int64, Int64)
forall a. Integral a => a -> a -> (a, a)
`quotRem`Int64
micro of(Int64
hi ,Int64
0)->Int64 -> Builder
buildFrac6 Int64
hi (Int64
hi ,Int64
lo )->Int64 -> Builder
digits6 Int64
hi Builder -> Builder -> Builder
forall a. Semigroup a => a -> a -> a
<>Int64 -> Builder
buildFrac6 Int64
lo buildFrac6 ::Int64->BuilderbuildFrac6 :: Int64 -> Builder
buildFrac6 Int64
i =caseInt64
i Int64 -> Int64 -> (Int64, Int64)
forall a. Integral a => a -> a -> (a, a)
`quotRem`Int64
milli of(Int64
hi ,Int64
0)->Int64 -> Builder
digits3 Int64
hi (Int64
hi ,Int64
lo )->Int64 -> Builder
digits3 Int64
hi Builder -> Builder -> Builder
forall a. Semigroup a => a -> a -> a
<>Int64 -> Builder
digits3 Int64
lo digits6 :: Int64 -> Builder
digits6 Int64
i =caseInt64
i Int64 -> Int64 -> (Int64, Int64)
forall a. Integral a => a -> a -> (a, a)
`quotRem`Int64
milli of(Int64
hi ,Int64
lo )->Int64 -> Builder
digits3 Int64
hi Builder -> Builder -> Builder
forall a. Semigroup a => a -> a -> a
<>Int64 -> Builder
digits3 Int64
lo digits3 :: Int64 -> Builder
digits3 Int64
i =Int64 -> Builder
digit64 Int64
a Builder -> Builder -> Builder
forall a. Semigroup a => a -> a -> a
<>Int64 -> Builder
digit64 Int64
b Builder -> Builder -> Builder
forall a. Semigroup a => a -> a -> a
<>Int64 -> Builder
digit64 Int64
c where(Int64
ab ,Int64
c )=Int64
i Int64 -> Int64 -> (Int64, Int64)
forall a. Integral a => a -> a -> (a, a)
`quotRem`Int64
10(Int64
a ,Int64
b )=Int64
ab Int64 -> Int64 -> (Int64, Int64)
forall a. Integral a => a -> a -> (a, a)
`quotRem`Int64
10pico :: Year
pico =Year
1000000000000-- number of picoseconds in 1 secondmicro :: Int64
micro =Int64
1000000-- number of microseconds in 1 secondmilli :: Int64
milli =Int64
1000-- number of milliseconds in 1 second{-# INLINEbuildTimeOfDay #-}buildTimeZone ::Local.TimeZone->BuilderbuildTimeZone :: TimeZone -> Builder
buildTimeZone (Local.TimeZoneInt
off Bool
_String
_)|Int
off Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
==Int
0=Char -> Builder
char7 Char
'Z'|Bool
otherwise=Char -> Builder
char7 Char
s Builder -> Builder -> Builder
forall a. Semigroup a => a -> a -> a
<>Int -> Builder
digits2 Int
h Builder -> Builder -> Builder
forall a. Semigroup a => a -> a -> a
<>Char -> Builder
char7 Char
':'Builder -> Builder -> Builder
forall a. Semigroup a => a -> a -> a
<>Int -> Builder
digits2 Int
m where!s :: Char
s =ifInt
off Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
<Int
0thenChar
'-'elseChar
'+'(Int
h ,Int
m )=Int -> Int
forall a. Num a => a -> a
absInt
off Int -> Int -> (Int, Int)
forall a. Integral a => a -> a -> (a, a)
`quotRem`Int
60{-# INLINEbuildTimeZone #-}dayTime ::Day->TimeOfDay->BuilderdayTime :: Day -> TimeOfDay -> Builder
dayTime Day
d TimeOfDay
t =Day -> Builder
buildDay Day
d Builder -> Builder -> Builder
forall a. Semigroup a => a -> a -> a
<>Char -> Builder
char7 Char
'T'Builder -> Builder -> Builder
forall a. Semigroup a => a -> a -> a
<>TimeOfDay -> Builder
buildTimeOfDay TimeOfDay
t {-# INLINEdayTime #-}buildUTCTime ::UTCTime->B.BuilderbuildUTCTime :: UTCTime -> Builder
buildUTCTime (UTCTimeDay
d DiffTime
s )=Day -> TimeOfDay -> Builder
dayTime Day
d (DiffTime -> TimeOfDay
Local.timeToTimeOfDayDiffTime
s )Builder -> Builder -> Builder
forall a. Semigroup a => a -> a -> a
<>Char -> Builder
char7 Char
'Z'{-# INLINEbuildUTCTime #-}buildLocalTime ::Local.LocalTime->BuilderbuildLocalTime :: LocalTime -> Builder
buildLocalTime (Local.LocalTimeDay
d TimeOfDay
t )=Day -> TimeOfDay -> Builder
dayTime Day
d TimeOfDay
t {-# INLINEbuildLocalTime #-}buildZonedTime ::Local.ZonedTime->BuilderbuildZonedTime :: ZonedTime -> Builder
buildZonedTime (Local.ZonedTimeLocalTime
t TimeZone
z )=LocalTime -> Builder
buildLocalTime LocalTime
t Builder -> Builder -> Builder
forall a. Semigroup a => a -> a -> a
<>TimeZone -> Builder
buildTimeZone TimeZone
z {-# INLINEbuildZonedTime #-}--------------------------------------------------------------------------------- Utilities-------------------------------------------------------------------------------digits2 ::Int->Builderdigits2 :: Int -> Builder
digits2 Int
a =Int -> Builder
digit Int
hi Builder -> Builder -> Builder
forall a. Semigroup a => a -> a -> a
<>Int -> Builder
digit Int
lo where(Int
hi ,Int
lo )=Int
a Int -> Int -> (Int, Int)
forall a. Integral a => a -> a -> (a, a)
`quotRem`Int
10digit ::Int->Builderdigit :: Int -> Builder
digit Int
x =Char -> Builder
char7 (Int -> Char
chr(Int
x Int -> Int -> Int
forall a. Num a => a -> a -> a
+Int
48))digit64 ::Int64->Builderdigit64 :: Int64 -> Builder
digit64 =Int -> Builder
digit (Int -> Builder) -> (Int64 -> Int) -> Int64 -> Builder
forall b c a. (b -> c) -> (a -> b) -> a -> c
.Int64 -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegralchar7 ::Char->Builderchar7 :: Char -> Builder
char7 =Char -> Builder
B.singleton

AltStyle によって変換されたページ (->オリジナル) /