nickreps
nickreps

Reputation: 1080

Swift - Find Difference Between Upcoming Time and Current Time

I have a date/time returning from an API that is formatted in RFC 3339. RFC3399 looks like the following: "2021-07-24T22:36:39-04:00"

To be even more clear, it can be generated directly in swift doing something like the following:

let RFC3339DateFormatter = DateFormatter()
RFC3339DateFormatter.locale = Locale(identifier: "en_US_POSIX")
RFC3339DateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ssZZZZZ"
RFC3339DateFormatter.timeZone = TimeZone(secondsFromGMT: 0)
 
/* 39 minutes and 57 seconds after the 16th hour of December 19th, 1996 with an offset of -08:00 from UTC (Pacific Standard Time) */
let string = "1996-12-19T16:39:57-08:00"
let date = RFC3339DateFormatter.date(from: string)

My question is, how can I find the difference between times stored in RFC 3339 format in String variables.

For example, I have one variable titled currentTime that returns the current date/time in RFC 3339 format, and I have data from my API that returns a future time in RFC 3339 format. How can I subtract the time returned in each of these to determine the difference between the two?

Also, the date returned is not a concern to me. Only need to find the difference in time.

Upvotes: 0

Views: 337

Answers (1)

once you have your dates from the strings, you coud do something like this using component:

EDIT, using Alexander suggestion:

struct ContentView: View {
    @State var timediff = ""
        var body: some View {
    Text(timediff)
        .onAppear {
            let RFC3339DateFormatter = DateFormatter()
            RFC3339DateFormatter.locale = Locale(identifier: "en_US_POSIX")
            RFC3339DateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ssZZZZZ"
            RFC3339DateFormatter.timeZone = TimeZone(secondsFromGMT: 0)
            
            let string1 = "1996-12-19T16:39:57-08:00"
            let date1 = RFC3339DateFormatter.date(from: string1)
            let string2 = "1996-12-19T13:19:27-08:00"
            let date2 = RFC3339DateFormatter.date(from: string2)
            
            if let d1 = date1, let d2 = date2 {
                let result = Calendar.current.dateComponents([.hour, .minute], from: d1, to: d2)
                timediff = result.description
            }
        }
}
    
    

Upvotes: 1

Related Questions