ios 使用时区转换日期

xqnpmsa8  于 2022-12-15  发布在  iOS
关注(0)|答案(1)|浏览(133)

我正在从服务器获取日期:2022-12-14 20:59:59 +0000我有优惠代码视图,所以根据收到的日期,我应该显示多少秒后,它将过期。
例如,如果我的当前日期是2022-12-14 19:59:59 +0000,我必须显示60:00秒。如果用户的时区是GMT+4,他也必须看到60:00秒。
所以我用这个代码:

let currentTime = Int(Date().timeIntervalSince1970)
 let expirationDate = model.expirationDate

 expiredText = expirationDate.dateStringWithFormat("dd.MM.yyyy")
 timeLeft = Int(expirationDate.timeIntervalSince1970) - currentTime

**结果为:**当前时间:2022年12月14日13:48:16 +0000 //我的当前时间是16:48:16

失效日期:2022年12月14日20时59分59秒+0000秒
剩余时间:“0 d. 07:11:43”
因此Date()返回错误的日期。
我试着用日历,但结果是一样的。

let calendar = Calendar(identifier: .gregorian)
let currentDate = Date()
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd HH:mm:ss:Z"
dateFormatter.timeZone = calendar.timeZone

我如何正确地将我的时区转换为接收日期的时区,反之亦然?谢谢

w7t8yxp5

w7t8yxp51#

我觉得你把事情弄得更复杂了。
我们有服务器时间戳

let serverDate = "2022-12-14 20:59:59 +0000"

我们使用格式化程序将其转换为Date

let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd HH:mm:ssZ"


然后,我们要计算服务器数据与当前数据之间的差异

if let expirationDate = dateFormatter.date(from: serverDate) {
    let components = Calendar.current.dateComponents([.day, .hour, .minute, .second], from: .now, to: expirationDate)
}

然后我们可以使用DateComponentsFormatter来得到字符串形式的差值

let compFormatter = DateComponentsFormatter()
print(compFormatter.string(from: components))

相关问题