我的iPhone应用程序中的时间标签缺少屏幕空间。 我的解决方案是有时间,例如在一行上的12:00,然后如果用户当前的区域设置指定使用AM-PM,请将它们放在它下面的第二个标签中。
由于AM-PM也有本地化的变种,我不能只找到字母“AM”或“PM”,然后我考虑剥去最后两个字母,但通过检查我发现一些语言使用的格式如这个:“FM” “E.M”。我的下一个想法是在前5位数字(12:34)之后删除所有内容,但是对于低于10的小时间隔也是不好的。
是否存在“区域设置安全”方式,无论用户设置如何,始终删除本地化后缀并将其移至新字符串?
提前谢谢你:)
答案 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]
这似乎是所有语言环境的稳定解决方案。