从NSString中剥离12小时时钟后缀

时间:2010-01-21 07:22:09

标签: iphone localization nsstring

我的iPhone应用程序中的时间标签缺少屏幕空间。 我的解决方案是有时间,例如在一行上的12:00,然后如果用户当前的区域设置指定使用AM-PM,请将它们放在它下面的第二个标签中。

由于AM-PM也有本地化的变种,我不能只找到字母“AM”或“PM”,然后我考虑剥去最后两个字母,但通过检查我发现一些语言使用的格式如这个:“FM” “E.M”。我的下一个想法是在前5位数字(12:34)之后删除所有内容,但是对于低于10的小时间隔也是不好的。

是否存在“区域设置安全”方式,无论用户设置如何,始终删除本地化后缀并将其移至新字符串?

提前谢谢你:)

2 个答案:

答案 0 :(得分:1)

没有语言环境安全的方法。

使用NSDateFormatter生成两个字符串。

NSDateFormatter  *timeOfDayFormatter = [[[NSDateFormatter alloc] init] retain];
[timeOfDayFormatter setDateFormat:@"hh:mm"];

NSDateFormatter  *amPmFormatter = [[[NSDateFormatter alloc] init] retain];
[amPmFormatter setDateFormat:@"aa"];


NSLog(@"Time is: %@ %@",
    [timeOfDayFormatter stringFromDate:theDate],
    [amPmFormatter stringFromDate:theDate]);

现在,您可以使用两个字符串布局用户界面。

24小时格式是我居住的标准格式。如果屏幕不动产是一个真正的问题,我会“强制”使用该格式。

答案 1 :(得分:0)

我最终解决了这个问题,然后使用15种以上的区域设置手动测试它:

NSArray *timeParts = [NSArray arrayWithArray:[[timeFormatter stringFromDate:myDate] componentsSeparatedByString:@" "]];

然后我测试timeParts数组:

if ([timeParts count] > 1) {...}

如果count为1,则它是没有后缀的区域设置,我不设置“AM / PM”标签。 另外,我设置了两个标签,timeLable为[timeParts objectAtIndex:0],localeLabel为[timeParts objectAtIndex:1]

这似乎是所有语言环境的稳定解决方案。