dateFormat DD/mm/yyyy HH:MM Z正在将字符串转换为日期Swift 3.0时崩溃



我使用日期格式 dd/MM/yyyy HH:mm z将此Datestring 01/06/2017 14:31 GMT+10:00解析为日期,但有时会提供零值。有时它可以正常工作。

您可以建议此日期字符串的正确日期格式吗?

我使用的是Swift 3.0和Xcode 8.3。

我的代码是:

static func getTimestampFromDateString(dateString:String) -> Int64{
    let separated = dateString.components(separatedBy: " ")
    let currentUser = User.getLoggedInUserDataModel()
    let finalDateStr = "(String.getString(separated[0])) (String.getString(separated[1])) (String.getString(currentUser.timeZoneOffset))"
    let date = convertStringToDate(dateString: finalDateStr, dateFormat: "dd/MM/yyyy HH:mm z")
    let timestamp = Int64(date.timeIntervalSince1970) 
    return timestamp
}
static func convertStringToDate(dateString:String,dateFormat:String)->Date{
    let dateFormatter = DateFormatter()
    dateFormatter.dateFormat = dateFormat
    let date:Date = dateFormatter.date(from: dateString)!
    return date
}

问题不是您的日期格式。问题在于您正在强制解开可选的可选,这导致崩溃。如果正确解开可选值,则可以防止崩溃。请参阅可选的未包装:https://developer.apple.com/library/content/content/documentation/swift/coneppeual/swift_programming_language/thebasics.htmll#/apple_reff/apple_ref/doc/doc/doc/uid/uid/tp4001400140014014097-ch5-ch5-ch5-ch5-id-d--iid/div/div>

日期格式 "dd/MM/yyyy HH:mm z"对我有用。顺便说一句,我在下面使用此代码

extension String
{
     func  toDate( dateFormat format  : String) -> Date
    {
        let dateFormatter = DateFormatter()
        dateFormatter.dateFormat = format
        if let date = dateFormatter.date(from: self)
        {
            return date
        }
        print("Invalid arguments ! Returning Current Date . ")
        return Date()
    }
}

这就是我打电话的方式。。

print("01/06/2017 14:31 GMT+10:00".toDate(dateFormat: "dd/MM/yyyy HH:mm z"))

您可以分两个步骤解决问题: 1:检查FinalDatester的日期形式,如果FinalDateSter与" DD/MM/YYYY HH:MM Z"相同,则可以在此构造中转换字符串。 2:在强制解开dateformatter.date之前检查零(来自:datestring(!

示例

 if let date = dateFormatter.date(from: dateString)!
{

// got the date

}else {
  // check finalDateStr formate
}

最新更新