时间间隔格式化
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了时间间隔格式化相关的知识,希望对你有一定的参考价值。
我想从一个音频片段中显示一个时间间隔,即:。"Snippet A is from 0:20 - 0:24"
我试着用... DateIntervalFormatter
像这样。
let formatter = DateIntervalFormatter()
formatter.timeStyle = .short
formatter.dateStyle = .none
let interval = DateInterval(start: .init(), duration: 20)
let (_start, _end) = (interval.start, interval.end)
let getTimeComponents =
Calendar.current.dateComponents([.minute, .second], from: $0)
let startComponents = getTimeComponents(_start)
let endComponents = getTimeComponents(_end)
let dateFrom = Calendar.current.date(from: $0)
let start = dateFrom(startComponents)!
let end = dateFrom(endComponents)!
let string = formatter.string(from: start, to: end)
print(string) // OUTPUT: "12:34 – 12:35 AM"
但并没有按照预期的方式进行格式化 我看过 DateComponentsFormatter
和 RelativeDateTimeFormatter
但它们似乎也没有提供理想的行为。
是否有一个 Formatter
在Foundation中提供这种行为?在考虑本地化时,手动实现这个似乎容易出错。
由于你要格式化的东西代表的是一个分和秒的数字,而不是一天的时间或日期,你应该使用 DateComponentsFormatter
.
你可以先对时间戳进行格式化,然后使用字符串插值来包含句子的其余部分。
let start: TimeInterval = 20
let end: TimeInterval = 24
let formatter = DateComponentsFormatter()
formatter.allowedUnits = [.minute, .second]
formatter.unitsStyle = .positional
formatter.zeroFormattingBehavior = .pad
let startString = formatter.string(from: start)
let endString = formatter.string(from: end)
let result = "Snippet A is from \(startString) - \(endString)"
你 可以 也会 "作弊",用 DateIntervalFormatter
... 你只需要设置 dateTemplate
的格式。
let formatter = DateIntervalFormatter()
formatter.dateTemplate = "m:ss"
let intervalString = formatter.string(from: Date(timeIntervalSince1970: start), to: Date(timeIntervalSince1970: end))
let result = "Snippet A is from \(intervalString)"
我觉得这是一个骗局,因为你实际上并没有将日期格式化。如果你有一个24小时长的音频片段,而时间戳为24:00:00。DateIntervalFormatter
将无法格式化,但是 DateComponentsFormatter
会. 这就是说,实际上并不存在一个 TimestampIntervalFormatter
...
以上是关于时间间隔格式化的主要内容,如果未能解决你的问题,请参考以下文章
[Javascript]_[初级]_[获取日期的时间间隔-格式化日期时间]
[Javascript]_[初级]_[获取日期的时间间隔-格式化日期时间]