在不同的iOS版本中获取完全相同的当前日期



在iOS 12.1中,我使用以下代码-来获得实际日期

let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd HH:mm:ss"
dateFormatter.timeZone = TimeZone(identifier: "GMT")!
let startDate = dateFormatter.date(from: startDate)
print("the startdate - ",startDate) 
// the startdate -  Optional(2018-12-10 14:58:06 +0000)
let secondsFromGMT = TimeZone.current.secondsFromGMT()
let date = Date().addingTimeInterval(TimeInterval(secondsFromGMT))
print("the date from seconds gmt - ",date) 
// the date from seconds gmt -  2018-12-10 16:10:32 +0000
let seconds = abs(Calendar.current.dateComponents([.second], from: startDate!, to: date).second ?? 0)

但在iOS 9.1中,使用相同的代码,我得到了不同的日期,如下所示

let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd HH:mm:ss"
dateFormatter.timeZone = TimeZone(identifier: "GMT")!
let startDate = dateFormatter.date(from: startDate)
print("the startdate - ",startDate) 
// the startdate -  Optional(2018-12-10 14:58:06 +0000)
let secondsFromGMT = TimeZone.current.secondsFromGMT() 
// secondsFromGMT is 0
let date = Date().addingTimeInterval(TimeInterval(secondsFromGMT))
print("the date from seconds gmt - ",date) 
// the date from seconds gmt -  2018-12-10 10:44:38 +0000
let seconds = abs(Calendar.current.dateComponents([.second], from: startDate!, to: date).second ?? 0)

因此,如果你检查打印报表,我不会得到实际的当前日期。那么,如何在不使用任何Web服务的情况下在两个版本中实现相同的日期呢?

什么是"12.1和9.1中的‘Date((’不同"?你是说它的显示方式不同?就像在中一样,在两个不同的操作系统版本中,您从日期格式化程序获得不同的输出?

您发布的代码使用的是let date = Date().addingTimeInterval(TimeInterval(secondsFromGMT))行中计算出的日期。该代码每次运行时都会生成一个略有不同的日期

表达式Date()为您提供代码运行时的当前日期。5秒后跑步,5秒后你会得到一个约会。花点时间在运行不同版本操作系统的模拟器上安装代码,因为时间已经过去,它会给出不同的结果。

您是否试图编写输入日期字符串,将其转换为date对象,然后添加偏移量的代码?你为什么用secondsFromGMT做数学?这不是处理时区转换的正确方法。

解释一下你想做什么,我们可以帮助你编写这样的代码。在我看来,你对如何在Cocoa做约会数学有一个根本的误解。

最新更新