Ios 将两个字符串转换为NSDate

Ios 将两个字符串转换为NSDate,ios,swift,Ios,Swift,我正在计算两次约会之间的时间。其中一个日期是今天,另一个日期是将来的某个地方 问题是将来的日期被分成两个字符串,第一个包含日期,另一个包含该日期的时间。当我将这两个字符串组合成一个字符串并尝试将其转换为NSDate时,得到的结果是零 我假设我的日期变量有问题 let eventDate: String? = "21 Aug Sun 2016" let eventTime: String? = "9:00 PM" let date : String? = "\(eventDate!) \(ev

我正在计算两次约会之间的时间。其中一个日期是今天,另一个日期是将来的某个地方

问题是将来的日期被分成两个字符串,第一个包含日期,另一个包含该日期的时间。当我将这两个字符串组合成一个字符串并尝试将其转换为NSDate时,得到的结果是零

我假设我的日期变量有问题

let eventDate: String? = "21 Aug Sun 2016"
let eventTime: String? = "9:00 PM"

let date : String? =  "\(eventDate!) \(eventTime!)"

    print(date!) // "21 Aug Sun 2016 9:00 PM"

    let formatter = NSDateFormatter()
    formatter.dateFormat = "dd MMM eee yyyy HH:MM a"
    formatter.AMSymbol = "AM"
    formatter.PMSymbol = "PM"

    if let dateTimeForEvent = formatter.dateFromString(date!) {
        print(dateTimeForEvent)
    }else {
        print("Error")// prints error

    }
两件事:

你现在的格式不对。应该是h:mm a。HH表示两位数的24小时制。你有一个1或2位数,12小时。MM表示两位数的月份。使用mm表示两位数的分钟。 如果日期和时间字符串始终为英语,则需要将格式化程序的区域设置为英语区域设置。如果您不这样做,您的代码将始终在任何使用英语以外语言的设备上返回零日期。 两件事:

你现在的格式不对。应该是h:mm a。HH表示两位数的24小时制。你有一个1或2位数,12小时。MM表示两位数的月份。使用mm表示两位数的分钟。 如果日期和时间字符串始终为英语,则需要将格式化程序的区域设置为英语区域设置。如果您不这样做,您的代码将始终在任何使用英语以外语言的设备上返回零日期。
您的主要问题是您使用的是HH,它是24小时制,而不是HH,MM是月制,而不是MM。试试这个:

进口基金会

let eventDate = "21 Aug Sun 2016"
let eventTime = "9:00 PM"

let eventDateTime =  "\(eventDate) \(eventTime)"

print(eventDateTime) // "21 Aug Sun 2016 9:00 PM"

let formatter = NSDateFormatter()
formatter.dateFormat = "dd MMM eee yyyy hh:mm a"

if let date = formatter.dateFromString(eventDateTime) {
    print(date) // 2016-08-21 21:00:00 +0000
}
else {
    print("Error")// prints error, no shit? why is this comment here?
}
旁注:

如果变量是字符串,为什么称为date?? 无论如何,为什么约会是可选的?您为它指定了一个文字值。 您不必设置AMSymbol和PMSymbol。这些只适用于打印日期,而不是解析日期。
您的主要问题是您使用的是HH,它是24小时制,而不是HH,MM是月制,而不是MM。试试这个:

进口基金会

let eventDate = "21 Aug Sun 2016"
let eventTime = "9:00 PM"

let eventDateTime =  "\(eventDate) \(eventTime)"

print(eventDateTime) // "21 Aug Sun 2016 9:00 PM"

let formatter = NSDateFormatter()
formatter.dateFormat = "dd MMM eee yyyy hh:mm a"

if let date = formatter.dateFromString(eventDateTime) {
    print(date) // 2016-08-21 21:00:00 +0000
}
else {
    print("Error")// prints error, no shit? why is this comment here?
}
旁注:

如果变量是字符串,为什么称为date?? 无论如何,为什么约会是可选的?您为它指定了一个文字值。 您不必设置AMSymbol和PMSymbol。这些只适用于打印日期,而不是解析日期。