【问题标题】:How to format time interval offset from 00:00 in HH:MM using DateComponentsFormatter如何使用 DateComponentsFormatter 在 HH:MM 中格式化从 00:00 开始的时间间隔偏移量
【发布时间】:2021-07-01 00:03:44
【问题描述】:

我有一个以毫秒为单位的值,我想以 HH:MM 格式显示

例子:

  • 我的输入为 0,输出应为 00:00
  • 如果输入是3600000,我需要的输出是01:00

我尝试了以下逻辑,但没有成功。


    func secondsToHourMinFormat(time: TimeInterval) -> String {
        let formatter = DateComponentsFormatter()
        formatter.allowedUnits = [.hour, .minute]
        return formatter.string(from: time) 
    }

【问题讨论】:

  • 请说明实际问题(可能的输入,期望的输出),而不告诉我们如何“解决”问题。如果您知道 DateComponentsFormatter 是获得此结果的方法,那么您就不会问这个问题了。
  • @matt 我编辑了附加我的逻辑版本的问题。希望这有助于清楚地理解我的疑问。
  • 这是一种更好的方式,向我们展示您的代码。谢谢。

标签: ios swift5 date-format timezone-offset dateformatter


【解决方案1】:

您的代码几乎是正确的,只是有一些遗漏。

  1. TimeInterval 以秒为单位,如果您经过毫秒,则需要除以 1000
  2. 您需要将.zeroFormattingBehaviour 设置为.pad,以免输出中出现零抑制
  3. 您需要以某种方式处理来自string(from:) 的可选返回;我已更改您的函数以返回 String?
func secondsToHourMinFormat(time: TimeInterval) -> String? {
    let formatter = DateComponentsFormatter()
    formatter.allowedUnits = [.hour, .minute]
    formatter.zeroFormattingBehavior = .pad
    return formatter.string(from: time/1000)
}

【讨论】:

  • 你能用新的.formatted 调用解决这个问题吗?我一直在努力,我只是不知道。
  • 我有测试版 Xcode,但我还没有测试版设备。
  • 我知道如何做一个时间间隔格式化程序,但我不知道如何告诉它指定零格式,如何只允许小时和分钟等。这很奇怪。
  • 似乎使用.timeDuration 并不能真正让您自定义格式 - 它是Date.ComponentsFormatStyle 上的静态属性。我尝试创建自己的格式化程序,但它也没有正确的选项。我更接近为“午夜”创建日期并添加 time/1000 - 然后我可以使用 .formatted(.dateTime.hour(.twoDigitsNoAMPM).minute(.twoDigits)) - 但我不能强制 24 小时,所以我得到 12 而不是 0。我认为我目前的答案更容易比新的热度:)
  • 听起来您经历了与我相同的过程,并得出了完全相同的结论。我很高兴我并不孤单。 :) 午夜解决方案的日期不起作用,因为如果正确答案是 40 小时怎么办?这是一个间隔,而不是时钟时间;你的回答抓住了这一点,我找不到用dateRange.formatted(.interval) 进行相同格式设置的方法。
猜你喜欢
  • 2012-08-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-27
  • 2017-10-23
  • 1970-01-01
  • 2012-04-30
相关资源
最近更新 更多