私は次のコードを持っています。
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の形式は常に同じであり、日付の形式も同じです。なぜそれが起こるのですか?
このようにロケールを設定してみてください:
NSLocale *twelveHourLocale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"];
df.locale = twelveHourLocale;
代わりに24時間に強制するには、次を使用できます。
NSLocale *twentyFour = [[NSLocale alloc] initWithLocaleIdentifier:@"en_GB"];
あなたのNSDateFormatter "yyyy-MM-dd'T'HH:mm:ss.SSSZZZ"
HH
は24時間、hh
は12時間を表します
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時間モードの場合は、逆の操作を行ってください。
NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
NSLocale *locale = [[[NSLocale alloc]
initWithLocaleIdentifier:@"en_US_POSIX"] autorelease];
[dateFormat setLocale:locale];