2011-12-09 25 views
2

我有一个应用程序,我设置了全球各个城市的时区。我这样做没问题,并且效果很好。当应用程序第一次加载时,它会找到您当前的位置(经纬度&长),并使用设备默认时区设置时区。我需要返回一个字符串中的默认时区,所以我可以显示它。我不想要“GMT”或“EDT”,我希望它的格式为“America/New_York”或“Europe/London”。任何想法?如何将系统时区作为字符串返回?

回答

13

这听起来像你想的:

NSString *timeZoneName = [[NSTimeZone localTimeZone] name];

返回 “美国/纽约” 对我来说,这里EST时区。

或给予任何NSTimeZone *tz你可以得到它的[tz name],这就是你正在寻找(例如,“亚洲/东京”或“欧洲/伦敦”的传统名称。

+[NSTimeZone knownTimeZoneName]可能的名称列表。

我希望帮助

+0

完美工作,谢谢。 – tombuarts

0

我不认为有一个对象自动关联的时区的物理位置

我看你这个标签的Objective-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#中使用反射库。

0

那么,重新假设EDT是与America/New_York相同的时区。事实并非如此。 :)是的,它们是相同的UTC偏移量,但就您的系统而言,它们是独立定义的。 Cocoa知道他们之间没有强烈的联系。

同样,如果用户给你EDT,你会返回New_York吗? TorontoPanama?没有1:1的对应关系。哦,并且:EDT甚至对于单个UTC偏移量来说都不是唯一的。澳大利亚东部夏令时也缩写为EDT,可可文档告诉我。

有缩写和长名之间[NSTimeZone abbreviationDictionary]地图,但同样,他们任意选择的,当有多个协会(如纽约和巴拿马。)

这是什么你想在更广义上完成?你的目标是什么?告诉我们,我们可能会提出一种替代方法来实现它。 :)

+0

有这个一个公认的惯例你可以看一下+ [NSTimeZone knownTimeZoneNames]对于那些使用iOS版是 –

+0

,但他们没有一个1:1的对应关系用缩写。 –

相关问题