Skip to content

Commit ce0392d

Browse files
committed
Add support for parsing unix timestamps with 10, 13, and 16 digits
1 parent ac15d47 commit ce0392d

2 files changed

Lines changed: 19 additions & 2 deletions

File tree

tasklite-core/source/ImportExport.hs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -76,14 +76,15 @@ data ImportTask = ImportTask
7676
-- | Values a suffixed with a prime (') to avoid name collisions
7777
instance FromJSON ImportTask where
7878
parseJSON = withObject "task" $ \o -> do
79-
utc <- o .:? "utc"
79+
utc <- o .:? "utc" <|> (o .:? "utc" :: Parser (Maybe Int))
8080
entry <- o .:? "entry"
8181
creation <- o .:? "creation"
8282
created_at <- o .:? "created_at"
83+
8384
let
8485
zeroTime = timeFromElapsedP 0 :: DateTime
8586
parsedCreatedUtc = parseUtc
86-
=<< (utc <|> entry <|> creation <|> created_at)
87+
=<< ((fmap show utc) <|> entry <|> creation <|> created_at)
8788
createdUtc = fromMaybe zeroTime parsedCreatedUtc
8889

8990
o_body <- o .:? "body"

tasklite-core/source/Utils.hs

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,11 +32,22 @@ x <++> y =
3232
flip (<$>)
3333

3434

35+
parseUtcNum :: Int -> Maybe DateTime
36+
parseUtcNum number =
37+
parseUtc (show number)
38+
39+
3540
parseUtc :: Text -> Maybe DateTime
3641
parseUtc utcText =
3742
let
3843
utcString = unpack $ T.toLower utcText
3944

45+
-- TOOD: Remove after https://github.com/vincenthz/hs-hourglass/issues/50
46+
addSpaceAfter10 = T.intercalate " " . T.chunksOf 10
47+
addSpaceAfter13 = T.intercalate " " . T.chunksOf 13
48+
unixMicro = "EPOCH ms us" :: [Char]
49+
unixMilli = "EPOCH ms" :: [Char]
50+
4051
tParse :: [Char] -> Maybe DateTime
4152
tParse formatString =
4253
timeParse (toFormat formatString) utcString
@@ -48,6 +59,11 @@ parseUtc utcText =
4859
<|> (tParse "YYYY-MM-DD H:MI:S")
4960
<|> (tParse "YYYY-MM-DD H:MI")
5061
<|> (tParse "YYYY-MM-DD")
62+
<|> timeParse
63+
(toFormat unixMicro)
64+
(unpack $ (addSpaceAfter10 . addSpaceAfter13) utcText)
65+
<|> timeParse (toFormat unixMilli) (unpack $ addSpaceAfter10 utcText)
66+
<|> (tParse "EPOCH")
5167

5268

5369
parseUlidUtcSection :: Text -> Maybe DateTime

0 commit comments

Comments
 (0)