Ios Swift以字符串形式获取当前日期和小时:分钟:秒之间的差值

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) {

在我的应用程序中,我得到一个字符串形式的JSON响应-->
“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
。请参阅我的最新答案。