将总分钟数转换为“ HH:mm”格式

时间:2020-11-07 19:09:09

标签: swift

我目前正在以分钟格式保存带有时间戳的数据,例如550是上午9:10。

是否可以将其转换为字符串“ 09:10”?我将使用24小时格式。

我正在为iOS应用程序使用swift,但是如果存在非语言特定的逻辑,那也会有所帮助。

干杯, 乔什

1 个答案:

答案 0 :(得分:1)

问题是550真正代表什么:

  1. 如果它表示一个抽象的时间间隔(以分钟为单位),则可能会将其转换为TimeInterval,然后使用DateComponentsFormatter来准备小时和分钟的字符串表示形式:

    let timeInterval = TimeInterval(minutes * 60)
    let formatter = DateComponentsFormatter()
    formatter.allowedUnits = [.hour, .minute]
    formatter.unitsStyle = .positional
    formatter.zeroFormattingBehavior = .pad
    let string = formatter.string(from: timeInterval)
    

这是一个简单的“小时和分钟”表示。如果小时数可能超过24(例如1,550分钟为25小时50分钟,或1天,1小时50分钟,具体取决于您是否将.day添加到{{1}),则此模式特别有用}或否。

  1. 但是,如果您真正的意思是550分钟旨在按字面表示一天中的时间,则可以使用日历日期计算,并使用DateFormatter来表示时间:

    allowedUnits

    但是,话虽如此,如果这确实代表了上午9:10(而不是9小时10分钟的抽象时间间隔),并且您想在用户界面中显示它,则通常会兑现设备的首选时间格式(上午/下午或24小时制):

    let timeInterval = TimeInterval(minutes * 60)
    let date = Calendar.current.startOfDay(for: Date()).addingTimeInterval(timeInterval)
    let formatter = DateFormatter()
    formatter.locale = Locale(identifier: "en_US_POSIX")
    formatter.dateFormat = "HH:mm"
    let string = formatter.string(from: date)
    

    无论哪种方式(强制24小时制或遵守用户的偏好),您实际上都在显示一天中的某个时间,这意味着,如果您在一天中的大多数时间上午9:10我们将日光节约的时间设为上午10:10,但是如果那天我们倒退到该天的标准时间,那将是上午8:10。

很明显,Objective-C中的语法与Swift中的语法不同,但是基本API相同(尽管您显然会使用let timeInterval = TimeInterval(minutes * 60) let date = Calendar.current.startOfDay(for: Date()).addingTimeInterval(timeInterval) let formatter = DateFormatter() formatter.timeStyle = .short formatter.dateStyle = .none let string = formatter.string(from: date) 前缀,例如NS和/或NSDateComponentsFormatter