2016-08-11 272 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。这些只适用于打印日期,不解析它们。