【问题标题】:DataFormatter.date(from: " ") return wrong value (- 1 day) SwiftDataFormatter.date(from: " ") return wrong value (- 1 day) Swift
【发布时间】:2018-04-24 16:03:18
【问题描述】:

我对@9​​87654321@ 有疑问。我设置了我的当前时区formatter.timezone = Calendar.current.timezone,但是当我从当前日期Date() 转换时,我得到了 - 1 天的价值

我的代码

let formatter = DateFormatter()
formatter.dateFormat = "yyyy-MM-dd"
formatter.calendar = Calendar(identifier: .iso8601)
formatter.timeZone = Calendar.current.timeZone
formatter.locale = Calendar.current.locale
let date = Date()
let dateString = formatter.string(from: date) // "2018-04-24"
viewModel.currentDate = formatter.date(from: dateString)!
print("\(viewModel.currentDate)") // "2018-04-23"

我知道这是错误的时区,但是如果将日期转换为字符串工作正常,如何设置我的时区以从字符串转换日期

【问题讨论】:

  • 日期正确。请注意Date 实例是printed 始终采用UTC

标签: swift dateformatter


【解决方案1】:

试试这个

let formatter = DateFormatter()
formatter.dateFormat = "yyyy-MM-dd"
formatter.timeZone = TimeZone(abbreviation: "GMT+0:00")
let date = Date()
let dateString = formatter.string(from: date) // "2018-04-24"
print("\(formatter.string(from: formatter.date(from: dateString)!))") // "2018-04-23"

【讨论】:

  • 这是可行的,但我可以为此设置 dateFormat 吗?我的结果:转换为字符串:2018-04-24 并转换为日期:2018-04-24 00:00:00 +0000
【解决方案2】:

要设置timeZone 属性,您需要提供NSTimeZone 实例。例如,您可以创建一个:

• NSTimeZone(名称:“太平洋夏令时间”) • NSTimeZone(缩写:“PST”) • NSTimeZone(forSecondsFromGMT: 3600)

记住使用时区名称而不是城市名称。

【讨论】:

  • 我试试这个和“不能分配类型'NSTimeZone的值?'输入“时区!””
  • 你需要做的:if let timeZone = NSTimeZone(abbreviation: "PST") {...
猜你喜欢
  • 2016-12-21
  • 2020-06-26
  • 2020-09-05
  • 1970-01-01
  • 1970-01-01
  • 2012-11-18
  • 2016-03-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多