首页 文章

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

提问于
浏览
0

在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 回答

  • 1

    你是什么意思“'日期()'在12.1和9.1中是不同的”?你的意思是它显示的方式不同?就像在2个不同的操作系统版本中从日期格式化程序获得不同的输出一样?

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

    表达式 Date() 为您提供代码运行时的当前日期 . 5秒后运行它,你会在5秒后得到一个日期 . 花时间在运行不同版本操作系统的模拟器上安装代码,因为时间已过,所以会产生不同的结果 .

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

    解释你正在尝试做什么,我们可以帮助你编写那样做的代码 . 在我看来,你对如何在Cocoa中进行日期数学有一个根本的误解 .

相关问题