日付を保持する NSString があります。
1900-01-01T11:00:00
フォーマットする必要があるため、フォーマッターがあります。
NSDateFormatter *df = [[NSDateFormatter alloc] init];
[df setDateFormat:@"dd/MM/yyyy hh:mm:ss a"];
この文字列を今フォーマットする方法は?
NSString* formatedDateString = [df ???];
日付を保持する NSString があります。
1900-01-01T11:00:00
フォーマットする必要があるため、フォーマッターがあります。
NSDateFormatter *df = [[NSDateFormatter alloc] init];
[df setDateFormat:@"dd/MM/yyyy hh:mm:ss a"];
この文字列を今フォーマットする方法は?
NSString* formatedDateString = [df ???];
指定された文字列の日付オブジェクトを返す日付フォーマッタを作成し、その日付から目的の形式で文字列を返す2番目の日付フォーマッタを作成します。
NSDateformatter *inputFormatter = [[NSDateformatter alloc] init];
[inputFormatter setDateFormat:@"yyyy-MM-dd'T'HH:mm:ss"];
[inputFormatter setLocale:[[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"]];
NSDate *date = [inputFormatter dateFromString:dateString];
NSDateformatter *outputFormatter = [[NSDateformatter alloc] init];
[outputFormatter setLocale:[[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"]];
[outputFormatter setDateFormat:@"dd/MM/yyyy hh:mm:ss a"];
NSString *outputString = [outputFormatter stringFromDate:date];
ただし、出力日付フォーマッタにロケールに関するスタイルを決定させることもできます。
NSDateformatter *outputFormatter = [[NSDateformatter alloc] init];
[outputFormatter setDateStyle:NSDateFormatterShortStyle];
[outputFormatter setTimeStyle:NSDateFormatterShortStyle];
NSString *outputString = [outputFormatter stringFromDate:date];
アメリカのロケールの場合は、目的の形式を猫にする必要があります。
ユーザーにフォーマット「dd/MM / yyyyhh:mm:ss a」を適用する場合は、出力日付フォーマッターのロケールも設定する必要があります。
完全なコマンドラインの例。
int main(int argc, const char * argv[])
{
@autoreleasepool {
NSString *dateString1 = @"2012-12-31T11:00:00";
NSString *dateString2 = @"2012-12-31T14:00:00";
NSDateFormatter *inputFormatter = [[NSDateFormatter alloc] init];
[inputFormatter setLocale:[[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"]];
[inputFormatter setDateFormat:@"yyyy-MM-dd'T'HH:mm:ss"];
NSDateFormatter *outputFormatter = [[NSDateFormatter alloc] init];
[outputFormatter setLocale:[[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"]];
[outputFormatter setDateFormat:@"dd/MM/yyyy hh:mm:ss a"];
NSDate *date1 = [inputFormatter dateFromString:dateString1];
NSDate *date2 = [inputFormatter dateFromString:dateString2];
NSString *outputString1 = [outputFormatter stringFromDate:date1];
NSString *outputString2 = [outputFormatter stringFromDate:date2];
NSLog(@"%@", outputString1);
NSLog(@"%@", outputString2);
}
return 0;
}
ロケールを設定し[outputFormatter setLocale:[[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"]];
ないと、「en_US」でない場合は、ユーザーのsefaultロケールとフォーマットの醜い組み合わせを行うことになります。
つまり、ドイツ語:31/12/2012 02:00:00 nachm.
これはドイツ語では使用されない形式です。
ユーザーの言語とロケールをサポートするには、代わりにさまざまなスタイルを使用する必要があります。
提供されたq&a rmaddyは、解析形式が書き換えられるまれなケースがあることを示しています。これを回避するには、入力フォーマットのフォーマットを次のような特定のロケールに設定します。[inputFormatter setLocale:[[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"]];
2つの日付フォーマッタを作成する必要があります。1つは解析用、もう1つはフォーマット用です。解析形式は「yyyy-MM-ddThh:mm:ss」で、出力形式は「dd / MM / yyyy hh:mm:ssa」です。だから、このようなもの:
NSString * targetString = @"1900-01-01'T'11:00:00";
NSDateFormatter *parseFormat = [[NSDateFormatter alloc] init];
[parseFormat setDateFormat:@"yyyy-MM-ddThh:mm:ss"];
NSDate * date = [parseFormat dateFromString:targetString];
NSDateFormatter * outputFormat = [[NSDateFormatter alloc] init];
[outputFormat setDateFormat:@"dd/MM/yyyy hh:mm:ss a";
NSString * outputString = [parseFormat stringFromDate:date];