Ios Swift以字符串形式获取当前日期和小时:分钟:秒之间的差值
在我的应用程序中,我得到一个字符串形式的JSON响应-->Ios Swift以字符串形式获取当前日期和小时:分钟:秒之间的差值,ios,swift,Ios,Swift,在我的应用程序中,我得到一个字符串形式的JSON响应-->“16:00:00” 我想做的是获取从当前日期到“16:00:00”的时间间隔(以秒为单位) 这是到目前为止我的代码。PS很抱歉描述不好,谢谢你的帮助 let dateFormatter = DateFormatter() dateFormatter.dateFormat = "HH:mm:ss" if let date = dateFormatter.date(from:task.start) {
“16:00:00”
我想做的是获取从当前日期到“16:00:00”的时间间隔(以秒为单位)
这是到目前为止我的代码。PS很抱歉描述不好,谢谢你的帮助
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "HH:mm:ss"
if let date = dateFormatter.date(from:task.start) {
print(date.timeDifference(date: Date()))
}
func timeDifference(date: Date) -> String {
let hourMinuteSecond: Set<Calendar.Component> = [.hour, .minute, .second]
let difference = Calendar.current.dateComponents(hourMinuteSecond, from: date, to: self);
let seconds = "\(difference.second ?? 0)s"
let minutes = "\(difference.minute ?? 0)m" + " " + seconds
let hours = "\(difference.hour ?? 0)h" + " " + minutes
if let hour = difference.hour, hour > 0 { return hours }
if let minute = difference.minute, minute > 0 { return minutes }
if let second = difference.second, second > 0 { return seconds }
return ""
}
let dateFormatter=dateFormatter()
dateFormatter.dateFormat=“HH:mm:ss”
如果let date=dateFormatter.date(from:task.start){
打印(日期。时差(日期:日期())
}
func时差(日期:日期)->字符串{
让hourMinuteSecond:Set=[.hour、.minute、.second]
让差异=Calendar.current.dateComponents(hourMinuteSecond,from:date,to:self);
let seconds=“\(差分.second±0)s”
让分钟数=“\(差分.minute±0)m”+“”+秒
let hours=“\(差分.hour±0)h”+“”+分钟
如果let hour=difference.hour,hour>0{return hours}
如果let minute=difference.minute,则minute>0{return minutes}
如果let second=difference.second,second>0{return seconds}
返回“”
}
有很多方法可以解决这个问题。这里有一个:
let df = DateFormatter()
df.dateFormat = "HH:mm:ss"
df.defaultDate = Date() // default to today's date
if let date = df.date(from:task.start) {
print(date.timeDifference(date: Date()))
}
func timeDifference(date: Date) -> String {
let diff = timeIntervalSince(date)
let fmt = DateComponentsFormatter()
fmt.unitsStyle = .abbreviated
let res = fmt.string(from: diff)
return res
}
此代码假定时差
是日期
的扩展方法
还请注意,如果字符串中的时间早于“now”,则会产生负时差。如果您想要正时差,无论时间字符串是在“now”之前还是之后,请使用abs
功能:
let res = fmt.string(from: abs(diff))
hh(1-12)没有AM-PM,这没有任何意义。你应该使用HH(0-23)@LeoDabus仍然不起作用我甚至没有看你的实现。顺便说一句,从
NSCalendar
中删除NS。您应该使用日历
3@LeoDabus你能帮我解决这个问题吗?我能,但现在不行。在我稍后有机会帮助您之前,您可能会得到响应。如果字符串中的时间早于“now”,则您将得到负时差。如果您想在“现在”之前或之后获得正时差,请使用abs
。请参阅我的最新答案。