Подтвердить что ты не робот

Часы в NSDate каждый раз в 24-часовом стиле?

У меня этот формат даты:

 NSDateFormatter *timeFormatter = [[NSDateFormatter alloc] init];
 [timeFormatter setDateFormat:@"HH:mm"];

Если я использую это:

 NSDate *myDate = [timeFormatter dateFromString:@"13:00"];

Он возвращает это:

 "1:00"

Это потому, что симулятор отключился 24 часа. Но для моего приложения мне действительно нужно "13:00" вместо "1:00"

--- РЕДАКТИРОВАТЬ 1 ---

Добавлен новый код:

NSCalendar *calendar= [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
NSCalendarUnit unitFlags = NSYearCalendarUnit | NSMonthCalendarUnit |  NSDayCalendarUnit | NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit;

NSDateFormatter *timeFormatter = [[NSDateFormatter alloc] init];
[timeFormatter setDateFormat:@"HH:mm"];
NSDate *timeForFirstRow = [timeFormatter dateFromString:@"13:00"];
NSDateComponents *dateComponents = [calendar components:unitFlags fromDate:timeForFirstRow];
NSInteger hour = [dateComponents hour]; //This will be 1 instead of 13
NSInteger minute = [dateComponents minute];
4b9b3361

Ответ 1

Если вы хотите принудительно настроить его на 12-часовой или 24-часовой режим, независимо от пользовательского режима 24/12 часов, вы должны установить языковой формат форматирования даты в en_US_POSIX (для 12-часового) или, скажем, en_GB для 24-часового режима.

То есть

NSLocale* formatterLocale = [[[NSLocale alloc] initWithLocaleIdentifier:@"en_GB"] autorelease];
[timeFormatter setLocale:formatterLocale];

Еще кое-что об этом здесь:

http://developer.apple.com/iphone/library/qa/qa2010/qa1480.html

Ответ 2

У меня была эта же проблема недавно и наткнулся на этот документ, в котором перечислены все шаблоны формата даты: http://unicode.org/reports/tr35/tr35-6.html#Date_Format_Patterns

Мне удалось работать 24 раза, просто используя k: mm в качестве формата даты:

NSDateFormatter *format = [[NSDateFormatter alloc] init];
[format setDateFormat:@"k:mm"];

Ответ 3

Из Apple Documentation строки форматирования времени следуют Unicode Technical Standard # 35.

Как указано в UTR # 35, в верхнем регистре HH дается 24-часовой стиль времени, а в нижнем регистре HH предоставляется 12-часовой стиль времени.

Короче говоря, если вам нужен 24-часовой стиль, используйте [timeFormatter setDateFormat:@"HH:mm"];, и если вам нужен 12-часовой стиль, используйте [timeFormatter setDateFormat:@"HH:mm"];

Ответ 4

Здесь вы должны сделать два шага

NSLocale* locale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_GB"];
[formatter setLocale:locale];

[formatter setDateFormat:@"hh:mm a"];

здесь a в formatter дает формат am/pm

Ответ 5

Если это помогает кому-либо, у меня только что была проблема, когда я хочу отображать время для пользователя так, как он установлен на своем устройстве:

let timeFormatter = NSDateFormatter()
timeFormatter.timeStyle = NSDateFormatterStyle.ShortStyle
//get the time from the picker

Отправьте время на наш API в стиле 24:

timeFormatter.locale = NSLocale(localeIdentifier: "en_GB")
//get the time again