úÎ!…óŽ      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹Œ None"#+.036;=>?AKV^ >Žhora+pad String with Char to total length of Int pad on leftpad '-' 5 "abc" "--abc" hora pad on rightpad' '-' 5 "abc""abc--" Ž None"#+.036;=>?AKV^õhora constrainthorasecond and fractionssee Data.Time.Hora.Span for conversion horatoPico (Milli 1) 1000000000 horatoMilli $ Sec 55000 horatoSec $ Milli 781200781 horapico in 1 second horapico in 1 milli horamilli in 1 sec ‘  None"#+.036;=>?AKV^0É hora1operation is not possible with these constructors horadata type maxed outhora  <>  hora3 uses fixed-size storage. Storage (as encoded with  Data.Binary[.encode) varies with the constructor used, is noted as ".. bytes" against each constructor.$allows to operate with dates only ..0.. or time (minute / millisecond precision) only4is convenient for dealing with intervals / timespans3day count begins at 1 Jan 0001: 1 Jan 0001 is day 13max date is: 11759222-01-19. That's 19 Jan 11759222see Data.Time.Hora.Part for conversion between UTCTime and only values constructed with  can be converted to UTCTimehora1days after 31 Dec 1 BC: 1 Jan AD 1 is day 1. See )https://en.wikipedia.org/wiki/Anno_Domini 5 bytes horaminutes (includes hours)3 byteshoramilliseconds (includes seconds)5 byteshoraminutes, milliseconds7 byteshoradate, minutes, milliseconds11 byteshoradate span in days5 byteshoratime span in minutes3 byteshoratime span in milliseconds5 bytes’horanegate. Hidden constructorhoraresult of failed operationhorasubstitutes constructor: ->  ->  -> horaadds hidden Neg constructor to ,  or  to enable negative spans hora checks if  is a negative span“hora”) can be used both to combine parts (e.g. , 4) and to add date/time span to the existing partscombining parts: <>  -> 3show' (mkDay 2018 08 20 <> mkMin 10 2 <> mkMs 30 9)2018-08-20 10:02:30.009 <>  ->  adding span: <>  -> !show' (mkDay 2018 1 1 <> Day' 20) 2018-01-21"show' (mkDay 2018 1 1 <> Day' 180) 2018-06-30 <>  -> show' (mkMin 3 15 <> Min' 200)06:35 <>  -> 9show' $ normalize $ mkMin 14 59 <> mkMs 132 9 <> Ms' 5308 15:01:17.317swhen incrementing and decrementing, overflow is checked on both upper (max for Word16, Word32) and lower (0) boundsrwhen incrementing, it is possible to normalize time by recalculating minutes from seconds, days from minutes. See  normalize in Data.Time.Hora.Part=when decrementing, normalization is not yet implemented. todo•hora op (+) (-)–horactorhora op (+) (-)  ’•–None"#+.036;=>?AKV^Eûhora— | ˜hora ($! a) parts show local date & time&for conversions between timezones see Data.Time.Hora.Zone hora  closely mimicks ™ without loss of precision  has š instance. The only purpose of  ) is to offer faster conversion from / to ™/ and more compact serialization compared with $.see Data.Time.Hora.Part for conversion between ™ and   "horaWThe Modified Julian Day is a standard count of days, with zero being the day 1858-11-17#hora› expressed as picoseconds$hora6serializeable structure for essential Date, Time partsmay also be used to construct ™ see Data.Time.Hora.Part for conversion between ™ and $ ,hora+excludes seconds. Just fraction as Integral-horaSec 1 > Milli 500 True .horaSec 1 == Milli 1000True /hora! fromInteger returns #. assumes the value is Pico seconds$Milli 397100 + (Sec 2) + 37891470000Pico 399137891470000+Milli 397100 + (Sec 2) + (Pico 37891470000)Pico 3991378914700003 * (Sec 10) == (Sec 30)True 3 * (Pico 10) == (Pico 30) True $300 * (Milli 1000) == (Milli 300000)True 0hora serializeable1hora serializeable2horaserializeable 3horafor ease of conversion5hora serializeable6horasee Data.Time.Hora.Zone re: ˜use of ˜# is preferred when converting from ™ to $ '  !"#$%+&'()*,'$%+&'()*,  !"#None"#+.036;=>?AKV^Gų  BCDE  DEBCNone"#+.036;=>?AKV^Vb Fhoraconvert $ -> ™Invalid date returns Nothing œhora/extract (TimeIfDay, seconds, picoseconds) from ›Jhoraspecified time zone/Tz (DatePart a) parts show local date & time  see also Data.Time.Hora.Zone KhoraJulian day offset (https://en.wikipedia.org/wiki/Julian_daymkDay 1 1 1 `shouldBe` (Day 1)3mkDay 1858 11 17 `shouldBe` (Day julian_day_offset)Lhora day / dateMhoraminutes including hoursNhoramilliseconds including secondsOhorafor (,  ) increase:minutes if seconds > 60days if minutes > 24 * 60#! does not change the constructor.  remains this function is called by G before the conversionRhora"returns DatePart a in UTC timezoneVhoraassumes DatePart is UTC horahourhoraminutehorapicoLhorayearhoramonthhoradayhoražMhorahourhoraminutehoraNhorasecondhora millisecondhora FGHIJKLMNO HIJFGLMNOKNone"#+.036;=>?AKV^]–Whora,Difference between times with pico precision,return TimeSpan for ease of conversion with Data.Time.Hora.Span YhoraŸ +/- offsetfrom unit test: ĨgetCurrentTime futureUTCTime $ Milli 100 futureUTCTime $ Sec 3 2016-12-12 15:34:03.138798524 UTC 2016-12-12 15:34:03.23893359 UTC 2016-12-12 15:34:06.138978355 UTC [hora@assuming both times are in the same date. Day part is discarded WXYYWXNone"#+.036;=>?AKV^s+ horabuild format string from \ \hora *0: 0 paddedsee Ą_horanew line`hora time zoneahoratime zone namebhora%H:%Mchora%H:%M:%SdhoraAM PMehoraam pmfhora 24-hour *0ghora 12-hour *0hhoraminute *0 ihorasecond *0 jhorapico precision *0 khora6.12 for 0.12 second. Pico precision, no trailing 0 lhora%Y-%m-%dmhorayearnhoramonth name longohoramonth name shortphoramonth *0qhoraday *0rhora'day of week for Week Date format, 1 - 7shora1day of week number, 0 (= Sunday) - 6 (= Saturday)thoraday of week shortuhoraday of week long vhora(week of year start Sunday whoraweek of year start Mondayxhora format as UTCyhora*format as local time in specified timezonezhora pretty print +incremental values are prefixed with + or -show' $ mkDay 2018 08 17 2018-08-17show' $ mkMin 4 3 04:03show' $ mkMs 7 318 07.318let (Day d1) = mkDay 2018 08 17 (Min m1) = mkMin 15 17 (Ms ms1) = mkMs 7 358# show' $ DatePartSmall d1 m1 ms1 2018-08-17 15:17:07.358show' $ Day' 3 +3show' $ toSpan $ mkMin 0 53 +00:53show' $ toSpan $ mkMs 7 0 +07.000show' $ T.negate $ Day' 3 -3'show' $ T.negate $ toSpan $ mkMin 14 53 -14:53{horaenter ] Ē as ordinary Ē with ){-# LANGUAGE OverloadedStrings #-} Ģhora format. see Ą \qiha]^_`bcdefgjklmnoprstuvwxyz\qiha]^_`bcdefgjklmnoprstuvwxyzNone"#+.036;=>?AKV^~~horatimestamp in specified formatsee Data.Time.Hora.Some for common [\]s €horanumeric ‚horatimestamp in specified format, — | TimeZoneSeriesƒhoralocal timezone  ($! a) parts show local date & timenow::IO(Tz (DatePart Int))tTz CET (DatePart {year = 2016, month = 12, day = 15, hour = 11, minute = 21, second = 21, pico = 657029375000}) „horanow::IO UTCTime(2016-12-15 10:20:54.664155598 UTC …horaUTC now::IO(DatePart Int)fDatePart {year = 2016, month = 12, day = 15, hour = 10, minute = 20, second = 31, pico = 494880242000}†horalocal timezone‡horaUTC~€‚€~‚None"#+.036;=>?AKV^Úˆhora yyyy-mm-dd ‰hora yyyymmdd Šhora,time.fraction no trailing 0 - varying length09:10:58.030311306 ‹horatime 09:11:18 Œhora date, time 2016-12-14 09:16:23 ˆ‰Š‹Œˆ‰Š‹ŒNone"#+.036;=>?AKV^…įhoraconvert $ from one TimeZone to another horatarget timezonehora'local (to source timezone) date & time hora&local (to target timezone) date & timeĪ if source date is invalidĨ                       ! " # $ % &'())**+,--./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“” • – — ˜ ™ š›œ ž Ÿ ĄĒĢĪĨ Ķ§ĻĐŠ ŦŽ­Ū Ŋ °ąē ģī›œĩķ›œ·ļ!hora-2.2.0-LsHHjglBktYDfEE6VgilWAData.Time.Hora.TypeData.Time.Hora.SpanData.Time.Hora.PartData.Time.Hora.FutureData.Time.Hora.FormatData.Time.Hora.StampData.Time.Hora.SomeData.Time.Hora.ZoneData.Time.Hora.Internal.PadData.Time.Hora.Internal.Span%Data.Time.Hora.Internal.DatePartSmallTwoIntTimeSpanSecPicoMillitoPicotoMillitoSecpicoSecpicoMsmsSec ErrorDetailInvalidOverflowInvalid_Overflow DatePartSmallDayMinMsTimeDay'Min'Ms'ErrortoSpannegate isNegativeTz'tz'Tz UTCTimeBinmodifiedJulianDaydiffTimeAsPicosecondsDatePartyearmonthdayhourminutesecondpico $fOrdTimeSpan $fEqTimeSpan $fNumTimeSpan$fBinaryDatePart$fBinaryDatePart0$fBinaryDatePart1$fFunctorDatePart $fOrdDatePart$fBinaryUTCTimeBin$fTz'TimeZoneSeries $fTz'TimeZone$fShowDatePart$fGenericDatePart$fEqUTCTimeBin$fShowUTCTimeBin$fGenericUTCTimeBin$fShowTz $fFunctorTz$fOrdTz$fEqTz $fEqDatePart toDiffTime nominalDiff picoTimeSpan timeSpanPicoToUTCtoUtcFromUTCfromUtcfromUtc'julian_day_offsetmkDaymkMinmkMs normalize$fFromUTCDatePartSmall$fFromUTCUTCTimeBin$fFromUTCDatePart$fToUTCDatePartSmall$fToUTCUTCTimeBin $fToUTCTz$fToUTCDatePartPicoDiff- futureUTCTime$fPicoDiffFixed$fPicoDiffUTCTimeFormatRawTabCrlfOffsetZoneHmHmsAMAmH_24H_12SFraction_fixedFractionY_m_dYMonthMthMth_1_12DD_wk_1_7D_wk_0_6D_wkD_week Wk_year_Sun Wk_year_Monformatformat'show'$fIsStringFormat $fBuildFormat $fBuild[] TimestamptsNownowts'$fNowTz $fNowUTCTime $fNowDatePart $fTimestampTz $fTimestamp[]isoymdtftdt toTimeZonepadpad'fiwithPicoNeg$fSemigroupDatePartSmallbaseGHC.Base<>incrDecr checkOverflow time-1.8.0.2%Data.Time.LocalTime.Internal.TimeZoneTimeZone,timezone-series-0.1.9-8w5oaJU2pXhFzj8uvIla6p#Data.Time.LocalTime.TimeZone.SeriesTimeZoneSeries Data.Time.Clock.Internal.UTCTimeUTCTimebinary-0.8.5.1Data.Binary.ClassBinary!Data.Time.Clock.Internal.DiffTimeDiffTime todSecPicodiffTimeData.Time.Calendar.DaysData.Time.Clock.POSIXgetCurrentTimeBuildData.Time.Format formatTimeStringwithDefaultLocaleNothing