【问题标题】:Swift time zones converting issue快速时区转换问题
【发布时间】:2015-12-01 10:01:23
【问题描述】:

在我的操场上,我创建了一个简单的代码示例,将时间从我的本地区域转换为"America/Sao_Paulo"

let gmtDf: NSDateFormatter = NSDateFormatter()
gmtDf.timeZone = NSTimeZone.systemTimeZone();
gmtDf.dateFormat = "HH:mm:ss"
let gmtDate: NSDate = NSDate.new()

print(gmtDate)

let estDf: NSDateFormatter = NSDateFormatter()
estDf.timeZone = NSTimeZone(name: "America/Sao_Paulo")
estDf.dateFormat = "HH:mm:ss"
let estDate: NSDate = estDf.dateFromString(gmtDf.stringFromDate(gmtDate))!

print(estDate)

所有代码工作正常,但我有一个与代码输出有关的问题。为什么打印的输出显示时间比我的当地时间早 2 小时。转换时间为2000年。

【问题讨论】:

  • 同样在这里!!!将光标放在日期上时,它显示 UTC,而在打印时显示不同。

标签: ios swift swift2 nsdate


【解决方案1】:
  1. 如果NSTimeZone.systemTimeZone 无法确定系统时区,它将返回格林威治标准时间,我猜这就是这里发生的事情,因为您使用的是游乐场。

  2. 您只使用小时、分钟和秒来从日期转换为字符串dateFormat = "HH:mm:ss",因此 String 没有关于年份的任何信息,这就是为什么当您使用它来转换回对于 NSDate,它显示 2000,因为它没有正确的信息来知道它是哪一年。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-12-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多