【问题标题】:Incorrect DateFormatter result when using timeIntervalSince1970使用 timeIntervalSince1970 时 DateFormatter 结果不正确
【发布时间】:2018-08-14 09:20:44
【问题描述】:

当我运行以下代码时

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

可能出了什么问题?

【问题讨论】:

  • 语言环境........?
  • 您在 GMT+8 时区吗?
  • 所以,我比我住的地方早了 10 个小时,你的代码(一旦更正)打印 01/01/1970 10:00:00 - 所以,这是一个时区问题

标签: ios swift nsdate nsdateformatter


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

显然您在 GMT+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)))

【讨论】:

    【解决方案2】:

    试试这个,你会根据你的时区得到日期:

    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)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-10-26
      • 1970-01-01
      • 1970-01-01
      • 2018-01-06
      • 1970-01-01
      • 1970-01-01
      • 2018-02-17
      • 1970-01-01
      相关资源
      最近更新 更多