DateComponentsFormatter可以格式化小数秒吗?

问题描述 投票:12回答:1

[我想像Safari的时间轴一样将1.5值打印为“ 1.5 sec”,并且我正在尝试使用DateComponentsFormatter。

[不幸的是,它的.allowedUnits仅下降到.second(即使枚举具有.nanosecond)。我尝试设置.allowsFractionalUnits = true,但仍然得到“ 0秒”。

是否有办法从DateComponentsFormatter中获得小数秒?

macos foundation nsdatecomponents nsdatecomponentsformatter
1个回答
0
投票

对于位置单位,样式DateComponentsFormatter可以与NumberFormatter一起使用以获取可识别语言环境的字符串。

func format(_ seconds: TimeInterval) -> String {
  let components = DateComponentsFormatter()
  components.allowedUnits = [.minute, .second]
  components.allowsFractionalUnits = true // does not work as expected
  components.unitsStyle = .positional
  components.zeroFormattingBehavior = .pad

  let fraction = NumberFormatter()
  fraction.maximumIntegerDigits = 0
  fraction.minimumFractionDigits = 0
  fraction.maximumFractionDigits = 3
  fraction.alwaysShowsDecimalSeparator = false

  let fractionalPart = NSNumber(value: seconds.truncatingRemainder(dividingBy: 1))

  return components.string(from: seconds)! + fraction.string(from: fractionalPart)!
}

print(Locale.current) // ru_RU (current)
print(format(600.5))  // 10:00,5 <- note locale specific decimal separator

不幸的是,将这种方法用于其他日期样式更容易出错。

© www.soinside.com 2019 - 2024. All rights reserved.