web-dev-qa-db-ja.com

12時間モードのNSDateFormatter

私は次のコードを持っています。

NSDateFormatter *df = ...;
[df setTimeZone:[NSTimeZone defaultTimeZone]];
[df setDateFormat:@"yyyy-MM-dd'T'HH:mm:ss.SSSZZZ"];
NSDate * date = [df dateFromString:date_string]; //here is the problem

24時間モードでは、すべて問題ありません。デバイスに12時間モードが設定されている場合、stringFromDateはnullを返します。 date_stringの形式は常に同じであり、日付の形式も同じです。なぜそれが起こるのですか?

26
Sergey

このようにロケールを設定してみてください:

NSLocale *twelveHourLocale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"];
df.locale = twelveHourLocale;

代わりに24時間に強制するには、次を使用できます。

NSLocale *twentyFour = [[NSLocale alloc] initWithLocaleIdentifier:@"en_GB"];
33
aleroot

あなたのNSDateFormatter "yyyy-MM-dd'T'HH:mm:ss.SSSZZZ"HHは24時間、hhは12時間を表します

54

12時間モードから24時間モード:

NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:@"hh:mm a"];
NSDate *amPmDate = [formatter dateFromString:amPmHourString];
[formatter setDateFormat:@"HH:mm"];
NSString *24HourString = [formatter stringFromDate:amPmDate]];

24時間モードから12時間モードの場合は、逆の操作を行ってください。

6
Luis Ascorbe
NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
NSLocale *locale = [[[NSLocale alloc] 
                initWithLocaleIdentifier:@"en_US_POSIX"] autorelease];  
[dateFormat setLocale:locale];
4
Sagar Desai