Ios 获取日期格式的崩溃
我在检查日期时遇到了麻烦:Ios 获取日期格式的崩溃,ios,swift,date,dateformatter,Ios,Swift,Date,Dateformatter,我在检查日期时遇到了麻烦: 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 =
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)
我从DT获得nil
我的日期是
2018-08-16 15:04:17
就像@rmaddy说的,问题是你的日期格式和你的输入不匹配hh
->12小时格式,hh
->24小时格式,这正是您所需要的。(请参阅底部的链接,以检查输入需要使用的内容)
唯一无法获得正确日期的情况是,日期
为空或与您提到的日期格式不匹配
另外,不要强制展开。安全地展开并处理无效日期输入的错误案例
有关日期格式的更多信息,请查看此项。@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)
}
}
同时删除最后一个
返回0
,因为它永远不会执行。日期的确切值是多少?您无法尝试将空字符串解析为日期,因为它将失败。我的日期为2018-08-16 15:04:17将hh
更改为hh
。(12小时对24小时)。在分析固定格式的日期字符串时,请始终将日期格式化程序的区域设置设置为en_US\u POSIX
。@rmaddy i已更改。但我的fromDt只得到nill检查是否传递给函数“cehckForDate”的日期不是nil。此外,如果您每次都会获取日期,则无需将其设置为可选。我仍然尝试在我的fromDt
设备日期和时间的常规设置中获取nill,因为24小时时间已关闭。如果我让它切换到它的罚款。但如果我把12小时的时间切换按钮设为关闭,那么我只能得到零。我怎样才能知道用户是关闭的还是打开的..基于此,我怎样才能显示that@david检查我的答案,它解决了这个问题,也解决了您的方法中的许多其他问题。添加locale
将在该场景中有所帮助@RakeshaShastri的回答也很恰当。
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)
}
}