【发布时间】:2015-04-08 00:49:49
【问题描述】:
我想获取一个以字符串表示的日期,其时区为 GMT+1,并以本地时区 GMT+10 显示在屏幕上。
我有两种方法,一种是从字符串创建日期(使用 GMT+1 时区),另一种是将日期格式化为字符串(使用 localTimeZone GMT+10):
func dateFromString(dateString: String) -> NSDate? {
let dateFormatter = NSDateFormatter()
dateFormatter.timeZone = NSTimeZone(abbreviation: "GMT+1")
dateFormatter.dateFormat = "M/d/yyyy hh:mma"
return dateFormatter.dateFromString(dateString)
}
func stringFromDate(date: NSDate) -> String {
let dateFormatter = NSDateFormatter()
dateFormatter.timeZone = NSTimeZone.localTimeZone()
dateFormatter.timeStyle = NSDateFormatterStyle.ShortStyle
return dateFormatter.stringFromDate(date)
}
在操场上,当我这样做时:
let date = dateFromString("4/8/2015 1:29am")!
println(date)
println(stringFromDate(date))
我在右侧得到以下输出:
"Apr 8, 2015, 1:29 AM"
"2015-04-07 15:29:00 +0000"
"1:29 AM"
我不明白为什么我没有得到我期望和寻找的东西:
"Apr 8, 2015, 1:29 AM"
"2015-04-08 10:29:00 +0000"
"10:29 AM"
怎么了?
【问题讨论】:
-
为什么您认为 1;29 AM GMT+1 会变成 10:29 GMT?
-
我希望我正在解析的日期以当地时间显示,即多 9 小时。所以我认为这样做的方法是解析日期字符串。当我这样做时,我指定这个日期将是 GMT+1,当我格式化这个日期时,我使用 GMT+10。似乎我在某个地方错了,所以我怎么能从 GMT+1 的日期得到 GMT+10 的日期?
-
但是上面日期列表中的中间行(大概)是 NSDate 对象的转储。这始终以 UTC 显示。
-
这实际上是我用
dateFromString解析字符串得到的日期。好的,因为使用 println 时日期以 UTC 显示。但我仍然不明白为什么当我使用println(stringFromDate(date))时,我得到“1:29 AM”而不是“10:29 AM”,因为我在stringFromDate方法中指定时区为 GMT+10。 -
好吧,您并没有向我们展示所有代码,以及用于打印输入、中间步骤和输出的日志语句,所以我们真的不能说。例如,“Apr 8, 2015, 1:29 AM”来自哪里——它与其他所有内容不一致。
标签: ios swift nsdateformatter