我想在时间轴上显示以下字符串:
“GMT / BST”
以下是代码:
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/
我无法得到正确的格式化程序答案 0 :(得分:0)
原来在iOS中有48个时区缩写(例如'BST')的内置数组。
NSDictionary *tzDict = [NSTimeZone abbreviationDictionary];
此阵列中有419个时区名称(例如“欧洲/伦敦”):
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
答案 1 :(得分:0)
我花了一天的时间,并希望确保其他人不会挂在上面。
对于英国区域/地区,DateFormatter中的“ z”字段模式将返回“美国/伦敦”时区的正确字符串(例如“ GMT”或“ BST”)。但是,如果您使用美国地区/地区,则“ z”会给您“ GMT + 1”。
当不存在具有给定语言环境 的给定目标时区的缩写时,就会发生陷阱。我使用的是“ v”字段模式,在美国地区,“欧洲/伦敦”回落到“英国时间”,这炸毁了我的文字标签。 “ z”更好,在DST中会回落到“ GMT + 1”,但仍不是所需的“ BST”。
缩写Dictionary不考虑夏令时。这是为了将缩写映射到时区。您会发现“ BST”:“ Americal / London”,但这仅适用于遵守@Nick T提到的夏令时。在标准时间,英国人习惯于看到“ GMT”。
不幸的是,如果您自己没有重新创建时区功能,那么您将不得不妥协。我认为iOS在这里可以做得更好。
参考