swift中的日期格式错误

时间:2017-08-24 11:02:31

标签: ios swift swift3

我是swift库的新手。 我在swift中使用日历,我想在日历中显示事件。事件是从Json API获得的,但是当我比较它显示错误的日期时。

这是代码

  let data = event["date"] as? String
  let newString = data?.replacingOccurrences(of: "/", with: "-")
  self.FirstData = self.EventDates[0]

比较功能

 func compareDate(date : String){
        let date = date

        let dateFormatter = DateFormatter()
        dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss"
      ====>>>>Error in line 
  let dateFromString : NSDate = dateFormatter.date(from: date)! as NSDate 
        dateFormatter.dateFormat = "yyyy-MM-dd"
        let datenew = dateFormatter.string(from: dateFromString as Date)
        print("datee",datenew)

    }

错误:致命错误:在解包可选值时意外发现nil

如何比较日期或解决此问题。

4 个答案:

答案 0 :(得分:1)

试试这个: -

func convertDate(date:String) -> String {
     let dateFormatter = DateFormatter()
    let tempLocale = dateFormatter.locale // save locale temporarily
    dateFormatter.locale = Locale(identifier: "en_US_POSIX") 
   // date format getting from server 
     dateFormatter.dateFormat = "YYYY-MM-dd'T'HH:mm:ss.SSSSSS'Z'"

    let date = dateFormatter.date(from: date)!
    //date format you want
    dateFormatter.dateFormat = "yyyy-MM-dd"
    dateFormatter.locale = tempLocale // reset the locale
    let dateString = dateFormatter.string(from: date)
    print("EXACT_DATE : \(dateString)")
    return dateString
 }

答案 1 :(得分:1)

date(from:)返回一个可选的Date,因为它可能无法正确转换给定的字符串。由于你无法确定何时发生这种情况,你不能强行打开结果(dateFormatter.date(from: date)!),而是安全地展开可选的,i。即使用这个结构:

if let dateFromString: NSDate = dateFormatter.date(from: date) as NSDate {
    ...
}

答案 2 :(得分:0)

尝试此更改日期格式

 let dateFormatter = NSDateFormatter()
 dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss"
 dateFormatter.timeZone = NSTimeZone(name: "GMT")
 let date = dateFormatter.dateFromString("2012-12-06 T 06:00:00 ")

 dateFormatter.dateFormat = "yyyy-MM-dd"
 let goodDate = dateFormatter.stringFromDate(date!)

答案 3 :(得分:0)

由于日期字符串与分配给dateformatter的格式不同,您的应用程序崩溃了。因为该日期对象返回nil值。

并强制nil值转换NSDate对象。因为该应用程序正在崩溃。

您只需更改比较日期方法,如下所示:

func compareDate(date : String) -> Date? {
    let dateFormatter = DateFormatter()
    dateFormatter.dateFormat = "MM-dd-yyyy"
    let dateFromString = dateFormatter.date(from: date)
    print("datee", dateFromString ?? "")
    return dateFromString
}

通过这样做,您可以创建Date对象。