Swift - 找出即将到来的时间和当前时间之间的差异

问题描述

我从采用 RFC 3339 格式的 API 返回日期/时间。RFC3399 如下所示:"2021-07-24T22:36:39-04:00"

更清楚地说,它可以在 swift 中直接生成,如下所示:

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)

我的问题是,如何在 String 变量中找到以 RFC 3339 格式存储的时间之间的差异。

例如,我有一个名为 currentTime 的变量,它以 RFC 3339 格式返回当前日期/时间,而我的 API 中的数据以 RFC 3339 格式返回未来时间。如何减去其中每个返回的时间以确定两者之间的差异?

另外,返回的日期对我来说不是问题。只需要找时间差即可。

解决方法

从字符串中获取日期后,您可以使用组件执行以下操作:

编辑,使用亚历山大的建议:

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
            }
        }
}
    
    

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...