A formatter for converting ISO 8601 durations to DateComponents.
Add the following to your Package.swift file's dependencies:
.package(url: "https://github.com/kkla320/ISO8601DurationFormatter.git", from: "2.0.0")
And then import wherever needed
import ISO8601DurationFormatter
let input = "PT40M"
let dateComponents = try formatter.dateComponents(from: input)
print(dateComponents.minute) // 40
let dateComponents = DateComponents(year: 6,
month: 2,
day: 2,
hour: 4,
minute: 44,
second: 22,
weekOfYear: 2)
let iso8601DurationString = formatter.string(from: input)
print(iso8601DurationString) // P6Y2M2W2DT4H44M22S
let dateComponents = try DateComponents(iso8601DurationString: "PT40M")
print(dateComponents.minute) // 40
You can also use negative durations as defined by ISO 8601-2:2019.
let dateComponents = try DateComponents(iso8601DurationString: "-PT40M")
print(dateComponents.minute) // -40
Be aware, that this is defined in an extension of the standard. Other libaries could not work with negative values.
let dateComponents = DateComponents(year: 6,
month: 2,
day: 2,
hour: 4,
minute: 44,
second: 22,
weekOfYear: 2)
let ISO8601DurationString = dateComponents.toISO8601Duration()
print(ISO8601DurationString) // P6Y2M2W2DT4H44M22S
You can also configure the behaviour of toISO8601Duration
with the emitZeroOrNilValues
parameter
let dateComponents = DateComponents(year: 0,
month: 0,
day: 2,
hour: 4,
minute: 44,
second: nil,
weekOfYear: 2)
let ISO8601DurationString = dateComponents.toISO8601Duration(emitZeroOrNilValues: true)
print(ISO8601DurationString) // P2W2DT4H44M
Special thanks to Igor-Palaguta for implementing the most in his project YoutubeEngine.
link |
Stars: 21 |
Last commit: 4 weeks ago |
ISO8601DurationFormatter.dateComponents(from string: String)
to throw an error, if the input could not be parsed @ScottSymes-ANZISO8601DurationFormatter.string(from dateComponents: DateComponents)
to complete the implementation of Formatter
@ScottSymes-ANZDateComponents
, so they won't be included in the resulting string @ScottSymes-ANZSwiftpack is being maintained by Petr Pavlik | @ptrpavlik | @swiftpackco | API | Analytics