swift中的日期格式错误
Posted
技术标签:
【中文标题】swift中的日期格式错误【英文标题】:Date Format Error in swift 【发布时间】:2017-08-24 11:02:30 【问题描述】:我是 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
如何比较日期或解决此问题。
【问题讨论】:
您从 api 收到日期的格式。 检查您在compareDate
中传递的日期。格式应为yyyy-MM-dd'T'HH:mm:ss
为什么选择NSDate
?并且要么你的日期格式错误,要么你需要设置DateFormatter
的Locale
。
how to compare date in swift 3.0?的可能重复
为什么要用replacingOccurrencesOf
转换字符串? DateFormatter
也可以处理斜线。并且不要在 Swift 3 中使用 NSDate
。
【参考方案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
【讨论】:
【参考方案2】:date(from:)
返回一个可选的Date
只是因为它可能无法正确转换给定的字符串。由于您无法确定何时发生这种情况,您不能强制解包结果 (dateFormatter.date(from: date)!
),而是安全地解包可选的,即。 e.使用这个结构:
if let dateFromString: NSDate = dateFormatter.date(from: date) as NSDate
...
【讨论】:
【参考方案3】:由于日期字符串的格式与分配给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
对象。
【讨论】:
@Dhruv 试试这个代码,当您收到“11-23-2016”格式的日期时,它将用于创建日期对象。 你为什么保留那些Date -> NSDate -> Date
的废话?摆脱它。
***.com/questions/45261579/… 我正在尝试这样做【参考方案4】:
试试这个来改变日期格式
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 goodDate = dateFormatter.string(from: date!) 出错 当Foundation
类具有原生 Swift 等效项(DateFormatter
和 TimeZone
)时,为什么还要使用它们?以上是关于swift中的日期格式错误的主要内容,如果未能解决你的问题,请参考以下文章