18

これは難しいことではありません..

年なしで日付を表示したい。例: 「8 月 2 日」(米国) または「02.08」。(ドイツ) 他の多くのロケールでも機能するはずです。

これまでの私の唯一のアイデアは、年で通常の形式を実行し、生成された文字列から年の部分を削除することです。

4

4 に答える 4

26

私はあなたが見てみる必要があると思います:

+ (NSString *)dateFormatFromTemplate:(NSString *)template options:(NSUInteger)opts locale:(NSLocale *)locale

ドキュメントに従って:

指定されたロケールに合わせて適切に配置された、指定された日付形式コンポーネントを表すローカライズされた日付形式文字列を返します。戻り値 locale で指定されたロケールに合わせて適切に配置された、テンプレートで指定された日付形式コンポーネントを表すローカライズされた日付形式文字列。

返される文字列には、テンプレートで指定されたコンポーネントが正確に含まれていない場合がありますが、たとえば、ロケール固有の調整が適用されている場合があります。

討論

ロケールが異なれば、日付コンポーネントの順序付けの規則も異なります。このメソッドを使用して、指定されたロケールの特定のコンポーネント セットに適した書式文字列を取得します (通常は、現在のロケールを使用します。currentLocale を参照してください)。

次の例は、イギリス英語とアメリカ英語の日付形式の違いを示しています。

NSLocale *usLocale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US"];
NSLocale *gbLocale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_GB"];

NSString *dateFormat;
// NOTE!!! I removed the 'y' from the example
NSString *dateComponents = @"MMMMd";  //@"yMMMMd";

dateFormat = [NSDateFormatter dateFormatFromTemplate:dateComponents options:0 locale:usLocale];
NSLog(@"Date format for %@: %@",
[usLocale displayNameForKey:NSLocaleIdentifier value:[usLocale localeIdentifier]], dateFormat);

dateFormat = [NSDateFormatter dateFormatFromTemplate:dateComponents options:0 locale:gbLocale];
NSLog(@"Date format for %@: %@",
[gbLocale displayNameForKey:NSLocaleIdentifier value:[gbLocale localeIdentifier]], dateFormat);

// Output:
// Date format for English (United States): MMMM d, y
// Date format for English (United Kingdom): d MMMM y

追加のコード (上記のコードに追加):

// 
NSDateFormatter * formatter = [[NSDateFormatter alloc] init];
formatter.locale = gbLocale;
formatter.dateFormat = dateFormat;
NSLog(@"date: %@", [formatter stringFromDate: [NSDate date]]);

ここを参照してください: NSDateFormatter クラスリファレンス

于 2013-09-12T14:55:21.280 に答える
20

あなたが挙げた2つの例は、互いに非常に異なっています。1 つは省略された月名を使用し、もう 1 つは 2 桁の月番号を使用します。1 つは日の序数 ("2nd") を使用し、もう 1 つは単純に 2 桁の日付番号を使用します。

すべてのロケールで同じ一般的な形式を使用できる場合は、NSDateFormatter dateFormatFromTemplate:options:locale:.

NSString *localFormat = [NSDateFormatter dateFormatFromTemplate:@"MMM dd" options:0 locale:[NSLocale currentLocale]];

この呼び出しの結果は、 で使用できるフォーマット文字列を返しますNSDateFormatter setDateFormat:。月と日の順序は、追加する必要のある句読点だけでなく、ロケールにも適しています。

ただし、ロケールごとに必要な形式が完全に異なるため、これは正確なニーズを解決しません。

于 2013-09-12T14:50:51.287 に答える