Skip to content

Commit eaafd0b

Browse files
committed
Adding missing DATE formatting of UNTIL parameter (from RFC5545 specification https://datatracker.ietf.org/doc/html/rfc5545#section-3.3.4).
1 parent 054df59 commit eaafd0b

File tree

1 file changed

+13
-2
lines changed

1 file changed

+13
-2
lines changed

src/main/kotlin/com/philjay/RRule.kt

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,13 @@
11
package com.philjay
22

33
import java.time.Instant
4+
import java.time.LocalDate
45
import java.time.LocalDateTime
56
import java.time.ZoneOffset
67
import java.time.format.DateTimeFormatter
8+
import java.time.temporal.TemporalAccessor
9+
import java.time.temporal.TemporalQuery
10+
711

812
open class RRule() {
913

@@ -119,7 +123,14 @@ open class RRule() {
119123
count = components[i].toIntOrNull() ?: 1
120124
} else if (component == "UNTIL") {
121125
i += 1
122-
until = LocalDateTime.parse(components[i], dateFormatter).toInstant(ZoneOffset.UTC)
126+
val temporalAccessor = dateFormatter.parseBest(component,
127+
TemporalQuery<Any> { temporal: TemporalAccessor? -> LocalDateTime.from(temporal) },
128+
TemporalQuery<Any> { temporal: TemporalAccessor? -> LocalDate.from(temporal) })
129+
if (temporalAccessor is LocalDateTime) {
130+
until = temporalAccessor.toInstant(ZoneOffset.UTC)
131+
} else {
132+
until = (temporalAccessor as LocalDate).atStartOfDay().toInstant(ZoneOffset.UTC)
133+
}
123134
}
124135

125136
if (component == "WKST") {
@@ -209,6 +220,6 @@ open class RRule() {
209220
}
210221

211222
companion object {
212-
private val dateFormatter = DateTimeFormatter.ofPattern("yyyyMMdd'T'HHmmss'Z'").withZone(ZoneOffset.UTC)
223+
private val dateFormatter = DateTimeFormatter.ofPattern("yyyyMMdd['T'HHmmss'Z']").withZone(ZoneOffset.UTC)
213224
}
214225
}

0 commit comments

Comments
 (0)