我想創(chuàng)建的不是Date
而是簡單的時(shí)間量(即持續(xù)時(shí)間),其單位可以是天、周或月,然后將它們很好地格式化為“1天”、“7天”、”3周“、”1個(gè)月“等。
然而Duration
和Measurement<UnitDuration>
初始值設(shè)定項(xiàng)都不接受這些單位。
// Type 'Duration' has no member 'days'
let duration: Duration = .days(7)
// Type 'UnitDuration' has no member 'days'
let measurement: Measurement<UnitDuration> = .init(value: 7, unit: .days)
我試圖擴(kuò)展UnitDuration
,但它不允許將單位自動(dòng)格式化為復(fù)數(shù)。
extension UnitDuration {
static let days = UnitDuration(
symbol: "days",
converter: UnitConverterLinear(coefficient: 60 * 60 * 24)
)
}
let measurement: Measurement<UnitDuration> = .init(value: 1, unit: .days)
measurement.formatted(.measurement(width: .wide, usage: .asProvided)) // "1 days" :(
目的是得到這樣的東西:
let onDay: Duration = .days(1)
let eightWeeks: Duration = .weeks(8)
oneDay.formatted() // "1 day"
eightWeeks.formatted() // "8 weeks"
正如Fabio所說,您可以使用
DateComponentsFormatter
:該代碼按預(yù)期輸出“13周”。
Edit:
DateComponentsFormatter
還有一個(gè)func string(from: TimeInterval)
函數(shù),它將花費(fèi)任意的秒數(shù),并用您要求的單位來表示。