如何将系统时区作为字符串返回?

时间:2011-12-09 01:34:47

标签: objective-c

我有一个应用程序,我为全球各个城市设置时区。我这样做没有问题,效果很好。当应用程序首次加载时,它会找到您当前的位置(lat& long)并使用设备默认时区设置时区。我需要在字符串中返回默认时区,因此我可以显示它。我不想要" GMT"或者" EDT",我希望它的格式为" America / New_York"或者'欧洲/伦敦"。有什么想法吗?

3 个答案:

答案 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)

嗯,您假设EDTAmerica/New_York的时区相同。事实并非如此。 :)是的,它们是相同的UTC偏移量,但就您的系统而言,它们是独立定义的。 Cocoa之间没有强烈的关联。

同样,如果用户为您提供EDT,您是否会返回New_YorkTorontoPanama?没有1:1的对应关系。哦,并且:EDT甚至不是单个UTC偏移的唯一。澳大利亚东部夏令时也缩写为EDT,Cocoa官员告诉我。

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

你想在更广泛的意义上实现什么?你的目标是什么?告诉我们,我们可能会建议另一种方法来实现它。 :)