2017-08-24 118 views
0

我是swift庫的新手。 我在swift中使用日曆,我想在日曆中顯示事件。這些事件是從Json API獲得的,但是當我比較它顯示錯誤的日期時。swift中的日期格式錯誤

這是代碼

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) 

    } 

錯誤:致命錯誤:意外發現零而展開的可選值

如何比較最新或解決此問題。

+0

從api收到日期的格式。 – MinuMaster

+0

檢查您在'compareDate'中傳遞的日期。它的格式應該是'yyyy-MM-dd'T'HH:mm:ss' –

+1

爲什麼要投射到'NSDate'?而且你的dateformat是錯誤的,或者你需要設置'DateFormatter'的'Locale'。 –

回答

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對象。

+0

@Dhruv試試這個代碼,它將用於在「11-23-2016」格式中收到日期時創建日期對象。 – MinuMaster

+0

你爲什麼要保留'日期 - > NSDate - >日期'廢話鑄造?只是擺脫它。 – user28434

+1

我將該方法更新爲請求@user28434。 – MinuMaster

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!) 
+0

bro我可以運行這段代碼讓goodDate = dateFormatter.string(from:date!)得到錯誤 – Dhruv

+1

爲什麼當它們有本地Swift等價物時('DateFormatter'和'TimeZone')? –

0

試試這個: -

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

date(from:)返回可選Date簡單,因爲它可能無法正確地轉換給定的字符串。由於您無法確定何時發生這種情況,您不得強制解包結果(dateFormatter.date(from: date)!),而是安全地解開可選的i。即採用這種結構:

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