【问题标题】:iPhone issue with time zoneiPhone时区问题
【发布时间】:2013-12-29 13:15:29
【问题描述】:

.plist 文件中有一个字段:

我确实在一本简单的字典中读过它。 一切正常,但在客户端,他说时差是 -3 小时(即他看到 2013 年 12 月 31 日晚上 10:30)

我想,我应该用他的区域设置归档项目,对吧?

UPD

  • 日期存储在 plist 中。
  • 日期:凌晨 1:30 -> 客户应该看到。
  • 另外,我使用NSDateFormatter

self.customFormatter = [NSDateFormatter new];

[self.customFormatter setDateFormat:@"hh:mm a"];

然后我使用[self.customFormatter stringFromDate:date]转换为字符串

我认为 - 我应该查看 .plist 文件并更改

<date>2014-01-01T01:30:00Z</date> 

进入

<date>2014-01-01T01:30:00-3</date> // I see Dec 2013, 10:30 PM; client sees Jan 2014, 1:30 AM

对吗?

【问题讨论】:

  • 一种选择是保留 UTC 时间,然后在视图中转换为本地时间。或者您可以将单独的时区设置与 UTC 时间一起保留,然后显示为
  • 同意布赖恩马克。以 UTC 格式保存时间并相应显示。
  • 感谢您的回答。让我看看,我将时间存储在plist中,并读取一次,然后将其存储在NSDate中。由于这篇文章stackoverflow.com/a/16560489/1040347 NSDate 没有时区属性
  • 您从不存储时区,那么您期望什么?

标签: ios iphone timezone


【解决方案1】:

日期作为 GMT 时间存储在属性列表中。 您的时区是“GMT+2”,因此“2014 年 1 月 1 日 1:30:00 AM”存档为

<plist version="1.0">
<dict>
    <key>time</key>
    <date>2014-01-01T23:30:00Z</date>
</dict>
</plist>

所以plist 存档没有问题,它独立于任何时区/区域设置(“Z”=“祖鲁时间”=格林尼治标准时间)。

只是Xcode中的editor属性列表,根据日期显示 到您的时区和语言环境。

当您将值读入NSDate 对象时,它恰好代表了这一点 时间。要将值呈现给用户,您必须使用NSDateFormatter,它 将NSDate 转换为代表此日期/时间的NSString 到用户的时区。

【讨论】:

  • 感谢您的回答。是的,它具有 2014-01-01T23:30:00Z 格式。但我不明白你想表达什么。我应该使用NSTimeZone 吗?
  • @BraveS:“2014 年 1 月 1 日上午 1:30:00 GMT+2”与“2013 年 12 月 31 日 10:30”同一时间点下午 GMT-1"。
  • 我之前应该提到过,但是看,我有一个格式化程序 self.customFormatter = [NSDateFormatter new]; [self.customFormatter setDateFormat:@"HH:mm a"]; 然后我使用 [self.customFormatter stringFromDate:date] 转换为字符串但我没有帮助
  • @BraveS:你期待什么结果?您所在时区的“2014 年 1 月 1 日上午 1:30:00”与客户所在时区的“2013 年 12 月 31 日晚上 10:30”时间相同。请注意,12 小时时间的日期格式是“hh”,而不是“HH”。 - 也许你可以更好地解释你想要做什么。日期最初来自哪里,它是如何存储的,等等......
  • @BraveS:所以您想在属性列表中存储“1:30 AM”,并且所有客户端都应该看到“1:30 AM”,而不管他们的时区如何? - 在这种情况下,您可以只存储一个字符串而不是日期。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-29
  • 2013-09-16
  • 2016-09-12
  • 2020-07-11
  • 2012-02-27
  • 2011-06-15
相关资源
最近更新 更多