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



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

有没有一种方法可以将其转换为字符串";09:10";?我将使用24小时制。

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

干杯,Josh

问题是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(例如,1550分钟是25小时50分钟,或1天1小时50分钟(取决于是否将.day添加到allowedUnits(,则此模式特别有用。

  1. 但是,如果您的意思是550分钟实际上代表一天中的时间,那么您可以使用日历日期计算,并使用DateFormatter作为时间的字符串表示:

    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)
    

    但是,话虽如此,如果这真的代表上午9:10(而不是9小时10分钟的抽象时间间隔(,并且你想在UI中显示它,你通常会遵守设备的首选时间格式(上午/下午或24小时时钟(:

    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)
    

    不过,无论哪种方式(强制24小时制或尊重用户的偏好(,你实际上都在显示一天中的时间,这意味着,虽然一年中的大多数日子都是上午9:10,但如果你在我们开始夏令时的那一天这样做,它会说上午10:10,但当我们倒退到当天的标准时间时,它会是上午8:10。

很明显,Objective-C中的语法与Swift中的语法不同,但基本的API是相同的(尽管您显然会使用NS前缀,例如NSDateComponentsFormatter和/或NSDateFormatter(。

最新更新