2016-08-11 261 views
1

我正試圖計算兩個日期之間的時間。其中一個日期是今天,另一個日期是未來的某個日子。將兩個字符串轉換爲NSDate

問題是將來日期分成兩個字符串,第一個包含日期,另一個包含該日期的時間。當我把兩個字符串放在一起,並嘗試將它轉換爲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 

    } 

回答

2

兩件事情:

  1. 您有時間的格式不正確。它應該是h:mm aHH是一個兩位數的24小時制小時。你有1或2位數的12小時小時。而MM是一個2位數的月份。使用mm兩位數分鐘。
  2. 如果日期和時間字符串始終爲英文,則需要將格式化程序的區域設置設置爲英文區域設置。如果您不這樣做,您的代碼將始終在使用非英語語言的任何設備上返回nil日期。
2

您的主要問題是,你正在使用HH,這是24小時的時間,而不是hhMM(這是一個月),而不是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,如果它是一個String?
  • 爲什麼date是可選的呢?您爲其分配了一個文字值。您不必設置AMSymbolPMSymbol。這些只適用於打印日期,不解析它們。