PositionalDateComponentsFormatter 是一个 Formatter
的实现,能够从各种输入输出人类可读的按位置排列的时间字符串。
此实现扩展了 DateComponentsFormatter 的行为(当设置为 positional
样式时),增加了对毫秒的支持。
PositionalDateComponentsFormatter 可以通过 Swift Package Manager 安装。
.package(url: "https://github.com/MrAsterisco/PositionalDateComponentsFormatter", from: "<see GitHub releases>")
要查找最新版本,请查看此仓库的 Releases 选项卡。
PositionalDateComponentsFormatter 继承自 Formatter
,因此您可以调用通用的 string(for:)
方法来获取格式化的字符串。
PositionalDateComponentsFormatter 可以格式化以下输入值
TimeInterval
: 传递的值会被转换为所需的单位并显示。DateComponents
: 有效的组件 (hour
, minute
, second
和 nanosecond
) 会被显示。 纳秒会被转换为毫秒。Date
: 日期会被转换为默认日历(或您指定的其他日历)中的组件并显示。Measurement
: 传递的 UnitDuration
测量值会被转换为所需的单位并显示。let formatter = PositionalDateComponentsFormatter()
// TimeInterval
let timeInterval: TimeInterval = 3665.55231354654
formatter.string(for: timeInterval) // -> 01:01:05.552
// DateComponents
var dateComponents = DateComponents()
dateComponents.hour = 13
dateComponents.minute = 28
dateComponents.second = 17
dateComponents.nanosecond = 120_345_112
formatter.string(for: dateComponents) // -> 13:28:17.120
// Date
let timeInterval = 753013811.1110001
let date = Date(timeIntervalSince1970: timeInterval)
formatter.string(for: date) // -> "11:30:11.111"
// Measurement
let measurement = Measurement(value: 120, unit: UnitDuration.milliseconds)
formatter.string(for: date) // -> "00:00:00.120"
您可以使用 allowedUnits
属性自定义在输出字符串中显示的单位。 您还可以通过更改 zeroFormattingBehavior
属性来自定义值为零的单位的行为。
PositionalDateComponentsFormatter 需要 iOS 13.0 或更高版本、macOS 10.15 或更高版本、watchOS 4.0 或更高版本和 *tvOS 11.0 或更高版本。
欢迎所有贡献来扩展此库。 Fork 此仓库,进行您想要的更改,然后打开一个 Pull Request。
如果您对代码库进行更改,我不会强制执行编码风格,但我可能会要求您根据库的其余部分的制作方式进行更改。
此库正在进行积极开发。 即使大多数 API 都非常简单明了,它们将来也可能会发生变化; 但您不必为此担心,因为发布将遵循 语义化版本 2.0.0。
PositionalDateComponentsFormatter 在 MIT 许可证下分发。 查看 LICENSE 了解详情。