如何使用 DateComponentsFormatter 在 HH:MM 中格式化从 00:00 开始的时间间隔偏移量

Posted

技术标签:

【中文标题】如何使用 DateComponentsFormatter 在 HH:MM 中格式化从 00:00 开始的时间间隔偏移量【英文标题】:How to format time interval offset from 00:00 in HH:MM using DateComponentsFormatter 【发布时间】: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 我编辑了附加我的逻辑版本的问题。希望这有助于清楚地理解我的疑问。 这是一种更好的方式,向我们展示您的代码。谢谢。 【参考方案1】:

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

    TimeInterval 以秒为单位,如果您经过毫秒,则需要除以 1000 您需要将.zeroFormattingBehaviour 设置为.pad,以免输出中出现零抑制 您需要以某种方式处理来自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) 进行相同格式设置的方法。

以上是关于如何使用 DateComponentsFormatter 在 HH:MM 中格式化从 00:00 开始的时间间隔偏移量的主要内容,如果未能解决你的问题,请参考以下文章

如何使用本机反应创建登录以及如何验证会话

如何在自动布局中使用约束标识符以及如何使用标识符更改约束? [迅速]

如何使用 AngularJS 的 ng-model 创建一个数组以及如何使用 jquery 提交?

如何使用laravel保存所有行数据每个行名或相等

如何使用 Math.Net 连接矩阵。如何使用 Math.Net 调用特定的行或列?

WSARecv 如何使用 lpOverlapped?如何手动发出事件信号?