fix(time): midnight timezone conversion bug eliminated
This commit is contained in:
parent
520e649fc8
commit
dfa07a95eb
@ -62,7 +62,7 @@ localTimeToUTC = TZ.localTimeToUTCFull appTZ
|
||||
localTimeToUTCSimple :: LocalTime -> UTCTime
|
||||
localTimeToUTCSimple = TZ.localTimeToUTCTZ appTZ
|
||||
|
||||
-- | Local midnight of given day
|
||||
-- | Local midnight of given day; use Utils.DateTime.utctDayMidnight :: Day -> UTCTime instead to avoid Timezone conversion!
|
||||
toMidnight :: Day -> UTCTime
|
||||
toMidnight = toTimeOfDay 0 0 0
|
||||
|
||||
|
||||
@ -17,7 +17,6 @@ import qualified Data.Text as Text
|
||||
import qualified Database.Esqueleto.Experimental as E -- might need TypeApplications Lang-Pragma
|
||||
import qualified Database.Esqueleto.Utils as E
|
||||
|
||||
import Handler.Utils.DateTime (toMidnight)
|
||||
import Handler.Utils.Widgets (statusHtml)
|
||||
|
||||
statusQualificationBlock :: Bool -> Html
|
||||
@ -152,7 +151,7 @@ upsertQualificationUser qualificationUserQualification qualificationUserLastRef
|
||||
QualificationUser
|
||||
{ qualificationUserFirstHeld = qualificationUserLastRefresh
|
||||
, qualificationUserScheduleRenewal = fromMaybe True mbScheduleRenewal
|
||||
, qualificationUserLastNotified = toMidnight qualificationUserLastRefresh
|
||||
, qualificationUserLastNotified = utctDayMidnight qualificationUserLastRefresh
|
||||
, ..
|
||||
}
|
||||
(
|
||||
|
||||
@ -410,7 +410,7 @@ dispatchJobLmsResults qid = JobHandlerAtomic act
|
||||
|
||||
update luid
|
||||
[ LmsUserStatus =. Just LmsSuccess
|
||||
, LmsUserStatusDay =. Just (toMidnight lmsResultSuccess)
|
||||
, LmsUserStatusDay =. Just (utctDayMidnight lmsResultSuccess)
|
||||
, LmsUserReceived =. Just lmsResultTimestamp
|
||||
]
|
||||
return Nothing
|
||||
@ -422,7 +422,7 @@ dispatchJobLmsResults qid = JobHandlerAtomic act
|
||||
audit TransactionLmsSuccess -- always log success, since this is only transmitted once
|
||||
{ transactionQualification = qid
|
||||
, transactionLmsIdent = lmsUserIdent
|
||||
, transactionLmsDay = toMidnight lmsResultSuccess
|
||||
, transactionLmsDay = utctDayMidnight lmsResultSuccess
|
||||
, transactionLmsUser = lmsUserUser
|
||||
, transactionNote = note
|
||||
, transactionReceived = lmsResultTimestamp
|
||||
|
||||
@ -159,9 +159,6 @@ instance Csv.FromField LmsTimestamp where
|
||||
parseField i = do
|
||||
s <- Csv.parseField i
|
||||
d <- Time.parseTimeM True Time.defaultTimeLocale lmsTimestampFormat s
|
||||
<|> (toMidnight <$> Time.parseTimeM True Time.defaultTimeLocale lmsDayFormat s)
|
||||
<|> (utctDayMidnight <$> Time.parseTimeM True Time.defaultTimeLocale lmsDayFormat s)
|
||||
<|> iso8601ParseM s -- Know-How AG considers supplying iso8601 dates in the future
|
||||
return $ LmsTimestamp d
|
||||
where
|
||||
toMidnight :: Day -> UTCTime
|
||||
toMidnight d = UTCTime { utctDay = d, utctDayTime = toEnum 0 }
|
||||
|
||||
@ -19,6 +19,7 @@ module Utils.DateTime
|
||||
, diffMinute, diffHour, diffDay
|
||||
, module Zones
|
||||
, day
|
||||
, utctDayMidnight
|
||||
) where
|
||||
|
||||
import ClassyPrelude.Yesod hiding (lift, Proxy(..))
|
||||
@ -181,3 +182,7 @@ day = QuasiQuoter{..}
|
||||
quoteType = error "day used as type"
|
||||
quoteDec = error "day used as declaration"
|
||||
quoteExp dStr = maybe (fail $ "Could not parse ISO8601 day: “" <> dStr <> "”") (lift :: Day -> Q Exp) $ Time.iso8601ParseM dStr
|
||||
|
||||
-- | use Handler.Utils.DateTime.toMidnight instead, if the local timezone is to be accounted for
|
||||
utctDayMidnight :: Day -> UTCTime
|
||||
utctDayMidnight d = UTCTime { utctDayTime = 0, utctDay = d }
|
||||
|
||||
Loading…
Reference in New Issue
Block a user