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