在 Swift 中将时间数组从 24 小时转换为 12 小时
Convert an array of times from 24hr to 12 hr in Swift
我有一个这样的数组:
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
}
}
如果您想更改数组,可以使用枚举并使用该索引更改数组元素:
Swift 3 或更高版本
var arrayTimes = ["16:00", "16:30", "17:00", "17:30", "18:00", "18:30"]
let dateFormatter = DateFormatter()
dateFormatter.locale = Locale(identifier: "en_US_POSIX")
for (index,time) in arrayTimes.enumerated() {
dateFormatter.dateFormat = "H:mm"
if let inDate = dateFormatter.date(from: time) {
dateFormatter.dateFormat = "h:mm a"
let outTime = dateFormatter.string(from:inDate)
print("in \(time)")
print("out \(outTime)")
arrayTimes[index] = outTime
}
}
print(arrayTimes) // "4:00 PM", "4:30 PM", "5:00 PM", "5:30 PM", "6:00 PM", "6:30 PM"]
Swift 2
var arrayTimes = ["16:00", "16:30", "17:00", "17:30", "18:00", "18:30"]
let dateFormatter = NSDateFormatter()
dateFormatter.locale = NSLocale(localeIdentifier: "en_US_POSIX")
for (index,time) in arrayTimes.enumerate() {
dateFormatter.dateFormat = "H:mm"
if let inDate = dateFormatter.dateFromString(time) {
dateFormatter.dateFormat = "h:mm a"
let outTime = dateFormatter.stringFromDate(inDate)
print("in \(time)")
print("out \(outTime)")
arrayTimes[index] = outTime
}
}
print(arrayTimes) // "4:00 PM", "4:30 PM", "5:00 PM", "5:30 PM", "6:00 PM", "6:30 PM"]
我有一个这样的数组:
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
}
}
如果您想更改数组,可以使用枚举并使用该索引更改数组元素:
Swift 3 或更高版本
var arrayTimes = ["16:00", "16:30", "17:00", "17:30", "18:00", "18:30"]
let dateFormatter = DateFormatter()
dateFormatter.locale = Locale(identifier: "en_US_POSIX")
for (index,time) in arrayTimes.enumerated() {
dateFormatter.dateFormat = "H:mm"
if let inDate = dateFormatter.date(from: time) {
dateFormatter.dateFormat = "h:mm a"
let outTime = dateFormatter.string(from:inDate)
print("in \(time)")
print("out \(outTime)")
arrayTimes[index] = outTime
}
}
print(arrayTimes) // "4:00 PM", "4:30 PM", "5:00 PM", "5:30 PM", "6:00 PM", "6:30 PM"]
Swift 2
var arrayTimes = ["16:00", "16:30", "17:00", "17:30", "18:00", "18:30"]
let dateFormatter = NSDateFormatter()
dateFormatter.locale = NSLocale(localeIdentifier: "en_US_POSIX")
for (index,time) in arrayTimes.enumerate() {
dateFormatter.dateFormat = "H:mm"
if let inDate = dateFormatter.dateFromString(time) {
dateFormatter.dateFormat = "h:mm a"
let outTime = dateFormatter.stringFromDate(inDate)
print("in \(time)")
print("out \(outTime)")
arrayTimes[index] = outTime
}
}
print(arrayTimes) // "4:00 PM", "4:30 PM", "5:00 PM", "5:30 PM", "6:00 PM", "6:30 PM"]