我有一个这样的数组:

arrayTimes = ["16:00", "16:30", "17:00", "17:30", "18:00", "18:30"]

我想把数组从24小时转换为12小时。这是迄今为止我所掌握的转换数组中第一个数字的方法。我错过了一些东西,但我做不到。
func convertTimes(){

                for twelve in arrayTimes{

                    var two = arrayTimes[0]

                    let dateFormatter = NSDateFormatter()
                    dateFormatter.dateFormat = "H:mm"
                    let date12 = dateFormatter.dateFromString(two)!

                    dateFormatter.dateFormat = "h:mm a"
                    let date22 = dateFormatter.stringFromDate(date12)

                    print(date22)

                    print("output \(twelve)")
                }
                }

            convertTimes()

最佳答案

您没有为转换使用正确的值:您的two变量始终是数组的第一项。
只需使用twelve即可,它表示循环时数组中的每个项:

for twelve in arrayTimes {

    let dateFormatter = NSDateFormatter()
    dateFormatter.dateFormat = "H:mm"
    let date12 = dateFormatter.dateFromString(twelve)!

    dateFormatter.dateFormat = "h:mm a"
    let date22 = dateFormatter.stringFromDate(date12)

    print(date22)

    print("output \(twelve)")
}

另外,只是一个提示:不需要每次循环迭代时都创建一个新的格式化程序,您只能在循环之外声明一次格式化程序。另外,请注意强制展开选项,我更喜欢使用if let或任何其他已知的方法,如guard
if let的示例:
let dateFormatter = NSDateFormatter()

for twelve in arrayTimes {

    dateFormatter.dateFormat = "H:mm"
    if let date12 = dateFormatter.dateFromString(twelve) {
        dateFormatter.dateFormat = "h:mm a"
        let date22 = dateFormatter.stringFromDate(date12)
        print(date22)
        print("output \(twelve)")
    } else {
        // oops, error while converting the string
    }

}

07-24 09:51
查看更多