日期格式崩溃
Getting crash on date format
我在检查日期时崩溃了:
func cehckForDate(date: String?) -> Int{
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd hh:mm:ss"
let fromDt = dateFormatter.date(from: date ?? "")
let curreentDate = Date()
let order = Calendar.current.compare(curreentDate , to: fromDt!, toGranularity: .day)
switch order {
case .orderedAscending:
return(2)
case .orderedDescending:
return(1)
case .orderedSame:
return(0)
}
return 0
}
我的崩溃在这里:
let order = Calendar.current.compare(curreentDate , to: fromDt!, toGranularity: .day)
我得到 nil
fromDt
我的约会对象是2018-08-16 15:04:17
正如@rmaddy 所说,问题是您的 日期格式 和您的 输入 - 它们 不匹配。 hh
-> 12 小时格式,HH
-> 24 小时格式,这正是您所需要的。 (请参阅底部的 link 以检查您需要用于输入的内容)
func checkForDate(date: String = "") -> Int{
let dateFormatter = DateFormatter()
dateFormatter.locale = Locale(identifier: "en_US_POSIX")
dateFormatter.dateFormat = "yyyy-MM-dd HH:mm:ss"
guard let validDateFound = dateFormatter.date(from: date) else {
print("Invalid date received. Please check if the date matches the date format - \(date)")
return -1 //Proper error code for invalid date
}
let order = Calendar.current.compare(Date() , to: validDateFound, toGranularity: .day)
switch order {
case .orderedAscending:
return(2)
case .orderedDescending:
return(1)
case .orderedSame:
return(0)
}
}
唯一无法获得正确日期的情况是 date
为空或与您提到的日期格式不匹配。
另外不要强制解包。安全解包并处理无效日期输入的错误案例。
您可以查看此 link 以获取有关日期格式的更多信息。
@rmaddy 是对的,将 hh
更改为 HH
有效:
func checkForDate(date: String?) -> Int{
let dateFormatter = DateFormatter()
dateFormatter.locale = Locale(identifier: "en_US_POSIX")
dateFormatter.dateFormat = "yyyy-MM-dd HH:mm:ss"
let fromDt = dateFormatter.date(from: date ?? "")
let curreentDate = Date()
let order = Calendar.current.compare(curreentDate , to: fromDt!, toGranularity: .day)
switch order {
case .orderedAscending:
return(2)
case .orderedDescending:
return(1)
case .orderedSame:
return(0)
}
}
同时删除最后一个 return 0
,因为它永远不会执行。
我在检查日期时崩溃了:
func cehckForDate(date: String?) -> Int{
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd hh:mm:ss"
let fromDt = dateFormatter.date(from: date ?? "")
let curreentDate = Date()
let order = Calendar.current.compare(curreentDate , to: fromDt!, toGranularity: .day)
switch order {
case .orderedAscending:
return(2)
case .orderedDescending:
return(1)
case .orderedSame:
return(0)
}
return 0
}
我的崩溃在这里:
let order = Calendar.current.compare(curreentDate , to: fromDt!, toGranularity: .day)
我得到 nil
fromDt
我的约会对象是2018-08-16 15:04:17
正如@rmaddy 所说,问题是您的 日期格式 和您的 输入 - 它们 不匹配。 hh
-> 12 小时格式,HH
-> 24 小时格式,这正是您所需要的。 (请参阅底部的 link 以检查您需要用于输入的内容)
func checkForDate(date: String = "") -> Int{
let dateFormatter = DateFormatter()
dateFormatter.locale = Locale(identifier: "en_US_POSIX")
dateFormatter.dateFormat = "yyyy-MM-dd HH:mm:ss"
guard let validDateFound = dateFormatter.date(from: date) else {
print("Invalid date received. Please check if the date matches the date format - \(date)")
return -1 //Proper error code for invalid date
}
let order = Calendar.current.compare(Date() , to: validDateFound, toGranularity: .day)
switch order {
case .orderedAscending:
return(2)
case .orderedDescending:
return(1)
case .orderedSame:
return(0)
}
}
唯一无法获得正确日期的情况是 date
为空或与您提到的日期格式不匹配。
另外不要强制解包。安全解包并处理无效日期输入的错误案例。
您可以查看此 link 以获取有关日期格式的更多信息。
@rmaddy 是对的,将 hh
更改为 HH
有效:
func checkForDate(date: String?) -> Int{
let dateFormatter = DateFormatter()
dateFormatter.locale = Locale(identifier: "en_US_POSIX")
dateFormatter.dateFormat = "yyyy-MM-dd HH:mm:ss"
let fromDt = dateFormatter.date(from: date ?? "")
let curreentDate = Date()
let order = Calendar.current.compare(curreentDate , to: fromDt!, toGranularity: .day)
switch order {
case .orderedAscending:
return(2)
case .orderedDescending:
return(1)
case .orderedSame:
return(0)
}
}
同时删除最后一个 return 0
,因为它永远不会执行。