使用timeIntervalSince1970时DateFormatter结果不正确

时间:2018-08-14 09:20:44

标签: ios swift nsdate nsdateformatter

当我运行以下代码时

let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "MM/dd/yyyy HH:mm:ss"
print(dateFormatter.string(from: Date(timeIntervalSince1970: 0)))

这被打印出来: 01/01/1970 08:00:00

应该是: 01/01/1970 00:00:00

怎么了?

2 个答案:

答案 0 :(得分:1)

  • Date(timeIntervalSince1970:)按照给定的秒数创建一个相对于1970年1月1日00:00:00 UTC 的日期。
  • DateFormatter默认根据您当地的时区格式化日期。

显然您处于格林尼治标准时间+8时区,因此“ 00:00:00 UTC”为 您的时钟上的“ 08:00:00”。

您可以为日期格式化程序分配其他时区,如果 需要。要打印相对于UTC使用的格式化日期

let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "MM/dd/yyyy HH:mm:ss"
dateFormatter.timeZone = TimeZone(secondsFromGMT: 0) // <--- HERE
print(dateFormatter.string(from: Date(timeIntervalSince1970: 0)))

答案 1 :(得分:1)

尝试一下,您将根据您的TimeZone获取日期:

let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "MM/dd/yyyy HH:mm:ss"
let timeZoneDifference = TimeInterval(TimeZone.current.secondsFromGMT())
let date = dateFormatter.string(from: Date(timeIntervalSince1970: 0))
print(date)
let dateAccoringToMyTimeZone = dateFormatter.string(from: 
Date(timeIntervalSince1970: timeZoneDifference))
print(dateAccoringToMyTimeZone)