在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服务的情况下在两个版本中实现相同的日期?
1 回答
你是什么意思“'日期()'在12.1和9.1中是不同的”?你的意思是它显示的方式不同?就像在2个不同的操作系统版本中从日期格式化程序获得不同的输出一样?
您发布的代码是在
let date = Date().addingTimeInterval(TimeInterval(secondsFromGMT))
行计算的瞬间使用日期 . 每次运行时,该代码都会生成略有不同的日期 .表达式
Date()
为您提供代码运行时的当前日期 . 5秒后运行它,你会在5秒后得到一个日期 . 花时间在运行不同版本操作系统的模拟器上安装代码,因为时间已过,所以会产生不同的结果 .您是否尝试编写输入日期字符串的代码,将其转换为Date对象,然后为其添加偏移量?你为什么用
secondsFromGMT
做数学?这不是处理时区转换的正确方法 .解释你正在尝试做什么,我们可以帮助你编写那样做的代码 . 在我看来,你对如何在Cocoa中进行日期数学有一个根本的误解 .