12

これは少しトリッキーな質問です。私は iPhone で NSDateFormatter を使用していますが、年のコンポーネントなしで標準の日付のみを表示したかったのです。ただし、ユーザーの日付のロケール形式を保持します。

を使用してフォーマットを簡単にオーバーライドできます

[dateFormatter setDateFormat:@"h:mma EEEE MMMM d"];  // hurl.ws/43p9 (date formatting)

しかし、現在、日付は私の en-nz 形式です。たとえば、7 月 7 日水曜日の午後 12 時 1 分です。したがって、世界中の他のユーザーのロケールを完全に削除しました。

と言いたいです。

このユーザーの地域の正しいローカライズされた日付を教えてください。ただし、年の部分は省略してください。

日付は文字列として表示されているので、日付から取り出して、文字列からこれを切り取って年のコンポーネントを削除したくなります。

4

3 に答える 3

16

iOS 4.0から、それを行う正しい方法(WWDC 2012のローカリゼーションセッションを参照)は、箱から出してさまざまなロケールのバリエーションをサポートし、上記のように次のAPIを使用しています。

+dateFormatFromTemplate:options:locale:

たとえば、年のない長い日付形式を取得するには、次のようにします。

NSDateFormatter* dateFormatter = [[NSDateFormatter alloc] init];  
NSString *longFormatWithoutYear = [NSDateFormatter dateFormatFromTemplate:@"MMMM d" options:0 locale:[NSLocale currentLocale]]; 
[dateFormatter setDateFormat:longFormatWithoutYear];
//format your date... 
//output will change according to locale. E.g. "July 9" in US or "9 de julho" in Portuguese
于 2012-07-08T23:41:04.303 に答える
11

次のようなことを試すことができます:

//create a date formatter with standard locale, then:

// have to set a date style before dateFormat will give you a string back
[dateFormatter setDateStyle:NSDateFormatterMediumStyle];

// read out the format string
NSString *format = [dateFormatter dateFormat];
format = [format stringByReplacingOccurrencesOfString:@"y" withString:@""];
[dateFormatter setDateFormat:format];

一種のハックですが、うまくいくはずです。

編集:ファンキーな余分なスペースやコンマができてしまった場合に備えて@"y,"、最初に文字列の出現箇所を削除することをお勧めします。@" y"

于 2009-07-09T04:54:20.387 に答える
10

上記の答えの問題は、@"y,"@" y"が両方ともローカリゼーションに依存していることです。コンピューターの日付と時刻の形式を日本語、韓国語、およびその他のさまざまな形式に設定してみました。年が現地の言語の記号で表されることもあれば、ピリオドが使用されることもあります。その他にもさまざまな可能性があります。したがって、正しいローカリゼーション依存関係を維持したい場合は、これらすべての可能性も検索して置き換える必要があります。

+dateFormatFromTemplate:options:locale:日付や時刻のスタイルをとらないため、柔軟性はありませんが、役立つクラスメソッドがあります。

Appleの追加のAPIを使用した優れたソリューションがあるかどうかはわかりません。しかし、それでも、独自のローカリゼーションがコンポーネントに分離されているかどうかは明らかではありません。それがなければ、これは本質的に不可能な作業です。

于 2009-12-14T18:07:33.473 に答える