我需要在iPhone上显示"hh:mm:ss“格式的计时器,但希望将其本地化。例如,芬兰在时间部分(hh.mm.ss)之间使用句点而不是冒号。如果我处理的是一个“时间”,苹果的NSDateFormatter就能做到这一点,但我需要显示的小时数远远大于24小时。
我不能让NSDate/NSDateFormatter工作,因为当你用秒来做一个的时候…
NSDate *aDate = [NSDate dateWithTimeIntervalSinceReferenceDate:aTotalSeconds];..。每隔86,400秒(相当于一天),NSDate会自动递增一天,小时、分钟和秒会回到零。我需要让它在任意时间内工作,而不是翻转。例如,对于86,401秒,我想显示24:00:01 (在芬兰是24.00.01 )。
我的代码可以很好地管理总秒数,所以我唯一的问题就是显示。一个简单的..。
[NSString stringWithFormat:@"%d%@%d%@%d", hours, sepString, mins, sepString, secs]..。如果我能找到一个本地化的"sepString“(时间分量分隔符),我就可以工作了。NSLocale似乎没有这个功能。
有什么想法?
发布于 2010-11-10 04:52:08
这是一种获取任何语言环境的时间分量分隔符的方法,这是一种公认的黑客方法。它应该可以在iOS 3.2及更高版本上运行。我知道代码可以更简洁,但我打开了我的“最大冗长”标志,以使其尽可能可读。
//------------------------------------------------------------------------------
- (NSString*)timeComponentSeparator
{
// Make a sample date (one day, one minute, two seconds)
NSDate *aDate = [NSDate dateWithTimeIntervalSinceReferenceDate:((24*60*60)+62)];
// Get the localized time string
NSDateFormatter *aFormatter = [[NSDateFormatter alloc] init];
[aFormatter setDateStyle:NSDateFormatterNoStyle];
[aFormatter setTimeStyle:NSDateFormatterShortStyle];
NSString *aTimeString = [aFormatter stringFromDate:aDate]; // Not using +localizedStringFromDate... because it is iOS 4.0+
// Get time component separator
NSCharacterSet *aCharacterSet = [NSCharacterSet characterSetWithCharactersInString:@":-."];
NSRange aRange = [aTimeString rangeOfCharacterFromSet:aCharacterSet];
NSString *aTimeComponentSeparator = [aTimeString substringWithRange:aRange];
// Failsafe
if ([aTimeComponentSeparator length] != 1)
{
aTimeComponentSeparator = @":";
}
return [[aTimeComponentSeparator copy] autorelease];
}
//------------------------------------------------------------------------------发布于 2010-11-07 11:30:54
以下是关于这个主题的信息,供其他可能试图弄清楚世界不同地区使用什么字符来分隔时间分量的人使用。我检查了我的iPhone - iOS V4.1 (8B117)上所有的"Region Format“设置,我发现除了七个区域之外,所有的区域都使用冒号(hh:mm)。下面是其他的(他们的NSLocaleCountryCode用大括号括起来)。
使用句点,hh.mm
·丹麦语(丹麦) {DK}
·芬兰语(芬兰) {FI}
·塞尔维亚语黑山语(西里尔文) {ME}
·塞尔维亚语黑山语(拉丁语) {ME}
·塞尔维亚语(西里尔文) {RS}
·塞尔维亚语(拉丁语) {RS}
使用破折号,hh-mm
·马拉地语(印度) {IN}
请注意,印度(不是马拉蒂-印度)也有国家代码IN,并且使用冒号。因此,仅仅检查国家代码是不够的,您必须查看其他NSLocale字段。我还没有看过所有的字段,但我怀疑NSLocaleScriptCode或NSLocaleVariantCode可能会区分它们。这种复杂性就是为什么苹果应该在SDK中向我们公开这个角色的原因。我确实在雷达上记录了它,所以如果你同意,请也请求它,请求的数量在他们决定做什么时很重要。
发布于 2017-03-12 08:26:00
在iOS8和更新版本中,您可以使用DateComponentsFormatter。下面是一个Swift 3的例子。
let duration: NSTimeInterval = 86401 // 24:00:01
let formatter = DateComponentsFormatter()
formatter.unitsStyle = .positional
formatter.allowedUnits = [.hour, .minute, .second]
formatter.zeroFormattingBehavior = [.pad]
let formattedDuration = formatter.string(from: duration)https://stackoverflow.com/questions/4109587
复制相似问题