【问题标题】:NSDateFormatter for BST instead of GMT+1NSDateFormatter 用于 BST 而不是 GMT+1
【发布时间】:2014-03-05 04:26:30
【问题描述】:

我想在我的时间轴上显示以下字符串:

“格林威治标准时间/英国夏令时”

代码如下:

 NSDateFormatter *dateformatter=[[NSDateFormatter alloc] init];
[dateformatter setDateFormat:@"zzz"];
timeZoneString = [NSMutableString stringWithFormat:@"%@ / %@",[dateformatter stringFromDate:startDate],[dateformatter stringFromDate:endDate]];

但这给出了“GMT/GMT+01:00”

将 "GMT+01:00" 转换为 "BST" 的 NSDateFormatter 代码是什么?尝试过 z|zzz|Z|ZZZ|v|V 后,我无法获得正确的格式化程序,请参阅...http://waracle.net/iphone-nsdateformatter-date-formatting-table/

【问题讨论】:

  • 好吧,如果 knownTimeZoneNames 没有显示您想要的名称,它可能不在 /usr/share/zoneinfo 中。
  • Europe/LondonknownTimeZoneNames 中最接近的。我想我可以以编程方式将字符串更改为 BST if = GMT+01:00 。但这似乎有点不合时宜。
  • (如果您尝试将时区设置为“GMT/BST”会怎样?)

标签: ios iphone nsdate nsdateformatter


【解决方案1】:

我为此花了一天时间,想确保其他人不会对此感到困惑。

对于英国地区/语言环境,DateFormatter 中的“z”字段模式返回“美国/伦敦”时区的正确字符串(例如“GMT”或“BST”)。但是,如果您使用美国地区/语言环境,“z”将为您提供“GMT+1”。

当具有给定语言环境的给定目标时区的缩写不存在时,就会出现问题。我使用的是“v”字段模式,在美国地区,“欧洲/伦敦”正在回退到“英国时间”,这让我的文本标签崩溃了。 'z' 更好,它在 DST 中回退到“GMT+1”,但仍然不是所需的“BST”。

abbreviationDictionary 不考虑夏令时。它旨在将缩写映射到时区。您会找到“BST”:“Americal/London”,但这仅适用于遵守@Nick T 提到的夏令时。在标准时间,英国人习惯于看到“GMT”。

不幸的是,如果不自己重新创建时区功能,您就会面临妥协。我认为 iOS 在这里可以做得更好。

参考

【讨论】:

【解决方案2】:

原来在 iOS 中有一个内置的 48 个时区缩写(例如“BST”)的数组。

NSDictionary *tzDict = [NSTimeZone abbreviationDictionary]; 

这个数组中有一个由 419 个时区名称组成的数组(例如 'Europe/London'):

NSArray *timeZoneNames = [NSTimeZone knownTimeZoneNames];

tzDict 包含时区名称子集的夏令时缩写。所以算法将检查我们是否在 DST 中,然后查看 tzDict 是否有一个条目,并替换它或者如果没有,使用

[NSTimeZone abbreviation];

这里有一些关于时区的其他主题。

Daylight saving time and time zone best practices

How can I map tz database names to city and country names?

C# british summer time (BST) timezone abbreviation

http://en.wikipedia.org/wiki/List_of_tz_database_time_zones

GMT timezone conversion in objective c

【讨论】:

  • 你怎么知道[NSTimeZone abbreviationDictionary] 只用于夏令时?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-03-30
  • 1970-01-01
  • 2013-02-21
  • 2011-02-06
  • 2020-06-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多