提问人:tombuarts 提问时间:12/9/2011 更新时间:12/9/2011 访问量:4339
如何以字符串形式返回系统时区?
How do you return the system time zone as a string?
问:
我有一个应用程序,可以在其中为全球各个城市设置时区。我这样做没有问题,而且效果很好。当应用程序首次加载时,它会找到您的当前位置(纬度和经度),并使用设备默认时区设置时区。我需要在字符串中返回默认时区,以便我可以显示它。我不想要“GMT”或“EDT”,我想要“美国/New_York”或“欧洲/伦敦”的格式。有什么想法吗?
答:
我不认为有一个对象可以自动将时区与物理地点相关联。
我看到你已经标记了这个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# 中的反射库。
好吧,您假设与 是同一时区。事实并非如此。:)是的,它们是相同的 UTC 偏移量,但就您的系统而言,它们是独立定义的。可可知道它们之间没有很强的联系。EDT
America/New_York
同样,如果用户给你,你会返回吗? ? ?没有 1:1 的对应关系。哦,还有:甚至不是单个 UTC 偏移量所独有的。澳大利亚东部夏令时也缩写,我是可可文档告诉我的。EDT
New_York
Toronto
Panama
EDT
EDT
缩写和长名称之间有一张地图,但同样,当有多个协会(例如纽约和巴拿马)时,它们是任意选择的。[NSTimeZone abbreviationDictionary]
从更广泛的意义上说,你想实现什么?你的目标是什么?告诉我们,我们也许可以提出另一种实现它的方法。:)
评论
听起来你想要这个:
NSString *timeZoneName = [[NSTimeZone localTimeZone] name];
这对我来说返回“美国/New_York”,这里是 EST 时区。
或者给定任何你可以得到它的,这是你正在寻找的常规名称(例如“亚洲/东京”或“欧洲/伦敦”。NSTimeZone *tz
[tz name]
查看可能的名称列表。+[NSTimeZone knownTimeZoneName]
我希望这会有所帮助。
下一个:如何旋转工具栏上的按钮?
评论