Часы в 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];
Ответы
Ответ 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