在我的项目中,我使用NSDateFormatter
来正确格式化应用程序中显示的日期。更具体地说,这是一个例子:
English: 12:34 am
Arabic: ١٢:٣٤ ص
看起来很棒,显示我需要的数字。但是,我有一个时间计数器/计时器在应用程序中向上/向下计数:
01:31:22 // HH:mm:ss
如何正确本地化此计数器以显示为:
٠١:٣١:٢٢
我检查了NSDateFormatter
,但就我所见,它并没有真正代表这个特定的用例。 NSNumberFormatter
似乎适用于货币和百分比。
为什么NSDateFormatter
无法理解
因为它具有NSTimeZone
属性,并且具有am/pm
后缀,当我们想要使用计数器时它们都无用。
答案 0 :(得分:2)
那时候,我觉得我有东西给你。我已经创建了一个基本的NSFormatter
子类,它可以帮到你。您需要做的只是NSNumber
,其中包含NSTimeInterval
。
.h和.m可在此处找到:https://github.com/WDUK/WDCountdownFormatter
以下是一些使用它的示例代码,是的,它应该尊重语言环境。
WDCountdownFormatter* format = [[WDCountdownFormatter alloc] init];
NSLog(@"70 - %@",[format stringForObjectValue:@(70)]);
NSLog(@"179 - %@",[format stringForObjectValue:@(179)]);
NSLog(@"-10 - %@",[format stringForObjectValue:@(-10)]); // Invalid, will return nil
NSLog(@"0 - %@",[format stringForObjectValue:@(0)]);
NSLog(@"9827193 - %@",[format stringForObjectValue:@(9827193)]);
NSLog(@"1 - %@",[format stringForObjectValue:@(1)]);
可生产
// UK English
2012-11-28 23:11:11.453 StackOverflow[28687:c07] 70 - 00:01:10
2012-11-28 23:11:11.456 StackOverflow[28687:c07] 179 - 00:02:59
2012-11-28 23:11:11.457 StackOverflow[28687:c07] -10 - (null)
2012-11-28 23:11:11.458 StackOverflow[28687:c07] 0 - 00:00:00
2012-11-28 23:11:11.458 StackOverflow[28687:c07] 9827193 - 2729:46:33
2012-11-28 23:11:11.459 StackOverflow[28687:c07] 1 - 00:00:01
// Egyptian Arabic
2012-11-28 22:59:54.057 StackOverflow[28400:c07] 70 - ٠٠:٠١:١٠
2012-11-28 22:59:54.659 StackOverflow[28400:c07] 179 - ٠٠:٠٢:٥٩
2012-11-28 22:59:55.473 StackOverflow[28400:c07] -10 - (null)
2012-11-28 22:59:56.464 StackOverflow[28400:c07] 0 - ٠٠:٠٠:٠٠
2012-11-28 22:59:57.311 StackOverflow[28400:c07] 9827193 - ٢٧٢٩:٤٦:٣٣
2012-11-28 23:10:36.657 StackOverflow[28400:c07] 1 - ٠٠:٠٠:٠١