我有一个应用程序,我为全球各个城市设置时区。我这样做没有问题,效果很好。当应用程序首次加载时,它会找到您当前的位置(lat& long)并使用设备默认时区设置时区。我需要在字符串中返回默认时区,因此我可以显示它。我不想要" GMT"或者" EDT",我希望它的格式为" America / New_York"或者'欧洲/伦敦"。有什么想法吗?
答案 0 :(得分:14)
听起来你想要这个:
NSString *timeZoneName = [[NSTimeZone localTimeZone] name];
对我来说,返回“America / New_York”,这是在EST时区。
或者给予任何NSTimeZone *tz
您可以获得[tz name]
,这是您正在寻找的传统名称(例如“亚洲/东京”或“欧洲/伦敦”。
查看+[NSTimeZone knownTimeZoneName]
以获取可能的名称列表。
我希望有所帮助。
答案 1 :(得分:0)
我认为没有一个对象会自动将时区与物理位置相关联。
我看到你已经标记了这个目标-c,但是在C#中你可以做这样简单的事情:
public Enum TimeZone
{
[Description("New York")]
EDT,
[Description("Los Angeles")]
PST
}
public static string GetDescription(Enum value)
{
FieldInfo fi= value.GetType().GetField(value.ToString());
DescriptionAttribute[] attributes = (DescriptionAttribute[])fi.GetCustomAttributes(typeof(DescriptionAttribute), false);
return (attributes.Length>0)?attributes[0].Description:value.ToString();
}
我不确定这对于objective-c是多么容易移植,并且确实需要在C#中使用反射库。
答案 2 :(得分:0)
嗯,您假设EDT
与America/New_York
的时区相同。事实并非如此。 :)是的,它们是相同的UTC偏移量,但就您的系统而言,它们是独立定义的。 Cocoa之间没有强烈的关联。
同样,如果用户为您提供EDT
,您是否会返回New_York
? Toronto
? Panama
?没有1:1的对应关系。哦,并且:EDT
甚至不是单个UTC偏移的唯一。澳大利亚东部夏令时也缩写为EDT
,Cocoa官员告诉我。
缩写和长名称之间有一个[NSTimeZone abbreviationDictionary]
地图,但同样,当有多个协会(例如纽约和巴拿马)时,它们会被任意选择。
你想在更广泛的意义上实现什么?你的目标是什么?告诉我们,我们可能会建议另一种方法来实现它。 :)