0 | module IotaTime.Pattern.Instant
2 | import IotaTime.Calendar
3 | import IotaTime.Calendar.Gregorian
4 | import IotaTime.CalendarDateTime
5 | import IotaTime.Instant
6 | import IotaTime.Offset
7 | import IotaTime.OffsetDateTime
8 | import IotaTime.Pattern
9 | import IotaTime.Pattern.Calendar
10 | import IotaTime.Pattern.CalendarDate
11 | import IotaTime.Pattern.CalendarDateTime
12 | import IotaTime.Pattern.LocalTime
18 | record InstantPattern state where
19 | constructor MkInstantPattern
20 | calendarPattern : Pattern state (CalendarDateTime Gregorian)
22 | calendarDateTimeToInstant : CalendarDateTime Gregorian -> Instant
23 | calendarDateTimeToInstant value = IotaTime.OffsetDateTime.toInstant
24 | (fromCalendarDateTimeWithOffset value empty)
28 | instantPattern : Pattern state (CalendarDateTime Gregorian) ->
29 | InstantPattern state
30 | instantPattern = MkInstantPattern
34 | parseInstant : InstantPattern state -> String -> Either PatternError Instant
35 | parseInstant pattern source =
36 | map calendarDateTimeToInstant
37 | (IotaTime.Pattern.parse pattern.calendarPattern source)
42 | formatInstant : InstantPattern state -> Instant ->
43 | Either CalendarConversionError String
44 | formatInstant pattern value = do
45 | offsetValue <- IotaTime.OffsetDateTime.fromInstant
46 | {calendar = Gregorian} empty value
47 | Right (IotaTime.Pattern.format pattern.calendarPattern
48 | (toCalendarDateTime offsetValue))
52 | pInstant : InstantPattern (DateFields, TimeFields)
53 | pInstant = instantPattern (ps {calendar = Gregorian} <% char 'Z')
58 | pInstantNano : InstantPattern (DateFields, TimeFields)
59 | pInstantNano = instantPattern (po {calendar = Gregorian} <% char 'Z')