在Swift中将一天中的一分钟(例如192)转换为凌晨3:12(或03:12)

时间:2016-01-11 17:01:13

标签: swift

我使用的是一种网络API,它以"一天中的分钟"的格式发回时间。例如,它在凌晨3:12返回192(或24小时时为03:12)。

有没有办法将当天的分钟格式化为更好看的3:12 AM / 03:12?

谢谢!

4 个答案:

答案 0 :(得分:4)

开始今天

let today = NSCalendar.currentCalendar().startOfDayForDate(NSDate())

添加192分钟

let date = NSCalendar.currentCalendar().dateByAddingUnit(.Minute, value: 192, toDate: today, options: [])

以短款打印

let formatter = NSDateFormatter()
formatter.timeStyle = .ShortStyle
print(formatter.stringFromDate(date!))

结果

3:12 AM

答案 1 :(得分:0)

实现这一目标最舒适的方法是使用NSDateComponentsFormatter。您可以在输出中指定所需的单位(.Hour.Minute)以及以秒为单位的时间间隔...有很多选项,值得您自己轻松浏览文档。

答案 2 :(得分:0)

以下是完整示例

     let myDateComponent = NSDateComponents()
  myDateComponent .year = 2016
  myDateComponent .month = 1
  myDateComponent .day = 11
  myDateComponent .hour = totalMinutes / 60
  myDateComponent .minute = totalMinutes % 60
  myDateComponent .second = 0

let calendarDate = NSCalendar.currentCalendar().dateFromComponents(myDateComponent )!


/***** NSDateFormatter Part *****/

let formatter = NSDateFormatter()
formatter.dateStyle = NSDateFormatterStyle.ShortStyle
formatter.timeStyle = .MediumStyle

let dateString = formatter.stringFromDate(calendarDate)

答案 3 :(得分:0)

您并不需要深入了解所有日期组件内容。这很简单:

let totalMinutes = 192
let hours = (totalMinutes / 60)
let adjustedHours = hours % 12 == 0 ? 12 : hours
let minutes = totalMinutes % 60
let ampm = hours < 12 ? "AM" : "PM"
print("\(adjustedHours):\(minutes) \(ampm)")  // Prints 3:12 AM

我实际上将它包装在一个函数中并考虑了军事时间因素:

func formatTimeFromMinutes(totalMinutes: Int, militaryTime: Bool) -> String {
    let hours = totalMinutes / 60
    let minutes = totalMinutes % 60

    if militaryTime {
        let prefix = (0..<10).contains(hours) ? "0" : ""
        return "\(prefix)\(hours):\(minutes)"
    } else {
        let adjustedHours = hours % 12 == 0 ? 12 : hours
        let ampm = hours < 12 ? "AM" : "PM"
        return "\(adjustedHours):\(minutes) \(ampm)"
    }
}