如何使用 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 提交?