4

私のプロジェクトでNSDateFormatterは、アプリケーションに表示される日付を適切にフォーマットするために使用しました。具体的には、次の例を示します。

English: 12:34 am
Arabic: ١٢:٣٤ ص

見栄えが良く、必要な数字が表示されます。しかし、私はアプリでカウントアップ/カウントダウンしているタイムカウンター/タイマーを持っています:

01:31:22 // HH:mm:ss

このカウンターを適切にローカライズして、次のように表示するにはどうすればよいですか。

٠١:٣١:٢٢

チェックNSDateFormatterしましたが、私が見る限り、これはこの特定のユースケースを実際に表すものではありません。NSNumberFormatter通貨とパーセンテージで機能するようです。


なぜNSDateFormatter意味がないのか:

それはNSTimeZoneプロパティを持ってam/pmいて、カウンターを使いたいときに両方とも役に立たない接尾辞を持っているからです。

4

1 に答える 1

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 - ٠٠:٠٠:٠١
于 2012-11-28T23:09:26.200 に答える