一个用于将 ISO 8601 时长 转换为 DateComponents 的格式化器。
将以下内容添加到你的 Package.swift 文件的依赖
.package(url: "https://github.com/kkla320/ISO8601DurationFormatter.git", from: "2.0.0")
然后在需要的地方导入
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
你也可以使用由 ISO 8601-2:2019 定义的负时长。
let dateComponents = try DateComponents(iso8601DurationString: "-PT40M")
print(dateComponents.minute) // -40
请注意,这是在标准的扩展中定义的。其他库可能无法处理负值。
let dateComponents = DateComponents(year: 6,
month: 2,
day: 2,
hour: 4,
minute: 44,
second: 22,
weekOfYear: 2)
let ISO8601DurationString = dateComponents.toISO8601Duration()
print(ISO8601DurationString) // P6Y2M2W2DT4H44M22S
你也可以使用 emitZeroOrNilValues
参数来配置 toISO8601Duration
的行为
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
特别感谢 Igor-Palaguta 在他的项目 YoutubeEngine 中的主要实现。