Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/100.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios swift中的日期格式错误_Ios_Swift_Swift3 - Fatal编程技术网

Ios swift中的日期格式错误

Ios swift中的日期格式错误,ios,swift,swift3,Ios,Swift,Swift3,我是斯威夫特图书馆的新手。 我正在swift中使用日历,我想在日历中显示事件。这些事件是从Json API获得的,但当我比较日期时,它显示了一个错误 这是密码 let data = event["date"] as? String let newString = data?.replacingOccurrences(of: "/", with: "-") self.FirstData = self.EventDates[0] 比较函数 func compareDate(date

我是斯威夫特图书馆的新手。 我正在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


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

尝试更改日期格式

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

尝试更改日期格式

 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!)
试试这个:-

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
 }
试试这个:-

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
 }
date(from:)
返回可选的
date
,因为它可能无法正确转换给定字符串。由于无法确定发生这种情况时,您不能强制展开结果(
dateFormatter.date(from:date)!
),而是安全地展开可选的,即。E使用此构造:

if let dateFromString: NSDate = dateFormatter.date(from: date) as NSDate {
    ...
}
date(from:)
返回可选的
date
,因为它可能无法正确转换给定字符串。由于无法确定发生这种情况时,您不能强制展开结果(
dateFormatter.date(from:date)!
),而是安全地展开可选的,即。E使用此构造:

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

您的应用程序正在崩溃,因为日期字符串的格式与分配给
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
}

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

您的应用程序正在崩溃,因为日期字符串的格式与分配给
日期格式化程序的格式不同。由于该日期对象返回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
对象。

从api接收日期的格式。请检查传入的日期
compareDate
。它的格式应该是
yyyy-MM-dd'T'HH:MM:ss
为什么要转换为
NSDate
?或者您的日期格式错误,或者您需要设置
日期格式设置程序的
区域设置
。为什么要使用
ReplacingOccurrencessof
转换字符串
DateFormatter
也可以处理斜杠。不要在Swift 3中使用
NSDate
。从api接收日期的格式。检查传入的日期
compareDate
。它的格式应该是
yyyy-MM-dd'T'HH:MM:ss
为什么要转换为
NSDate
?或者您的日期格式错误,或者您需要设置
日期格式设置程序的
区域设置
。为什么要使用
ReplacingOccurrencessof
转换字符串
DateFormatter
也可以处理斜杠。不要在Swift 3中使用
NSDate
。@Dhruv尝试一下这段代码,它可以在您收到“11-23-2016”格式的日期时创建日期对象。您为什么保留这些
date->NSDate->date
格式?把它扔掉。我试着做我喜欢的事this@Dhruv试试这段代码,它可以在您收到“11-23-2016”格式的日期时创建日期对象。您为什么保留这些
date->NSDate->date
?把它扔掉。我试着这样做bro我可以运行这个代码让goodDate=dateFormatter.string(from:date!)获取错误为什么要使用
Foundation
类当它们有本地Swift等价物(
dateFormatter
TimeZone
)?bro我可以运行这个代码让goodDate=dateFormatter.string(from:date!)获取错误当类具有本机Swift等价物(
DateFormatter
TimeZone
)时,为什么要使用
Foundation
类?