Конвертировать 24-часовой формат в Obj-C - PullRequest
1 голос
/ 28 октября 2010

В настоящее время я отображаю время в 24-часовом формате, потому что сейчас мне проще всего это сделать с имеющимися у меня данными.

Я получаю время в «минутах с полуночи», например, 07:00 или 7:00 утра - «420», а 21:30 или 9:30 вечера - «1290» и т. Д.

[NSString stringWithFormat:@"%02d:%02d - %02d:%02d", (open / 60), (open % 60), (close / 60), (close % 60)]

Есть ли хороший способ использовать NSDateFormatter для преобразования из 24 часов в 12 часов? Я перепробовал множество вещей, но никогда не получал 100% правильного форматирования.

Я также пытался использовать множество операторов if только для того, чтобы получить слишком много строк кода, что, на мой взгляд, совершенно не нужно для такой относительно "легкой" работы.

Кроме того, независимо от того, что я пытаюсь, я также получаю неправильное 12-часовое форматирование для часов без «1» в начале, например «09:30» и т. Д. Я могу удалить это, ища суффикс, но снова это только кажется утомительным и странным.

Ответы [ 4 ]

11 голосов
/ 28 октября 2010

Вы действительно должны использовать системное форматирование даты по умолчанию:

NSDateComponents *comps = [[NSDateComponents alloc] init];
[comps setHour:hours];
[comps setMinute:minutes];
NSDate* date = [[NSCalendar currentCalendar] dateFromComponents:comps];
NSString* dateString = [NSDateFormatter localizedStringFromDate:date dateStyle:NSDateFormatterNoStyle timeStyle:NSDateFormatterLongStyle];

Или, если вы настаиваете, вы можете сделать

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"hh:mm a"];
NSString* dateString = [dateFormatter stringFromDate:date];

4 голосов
/ 01 апреля 2013

Для кого-то нового, такого как я, я боролся с форматером даты и обнаружил, что [NSCalendar currentCalendar] будет использовать настройки пользователя для установки часового пояса.В моей ситуации я хотел преобразовать время, которое дал мне сервер, поэтому это всегда было неправильно.Я использовал эту простую функцию в моем случае.

- (NSString *)formatTime:(NSString *)time
{
  NSString *hour = [time substringWithRange:NSMakeRange(0, 2)];
  NSString *minute = [time substringWithRange:NSMakeRange(2, 2)];

  NSString *tail = ([hour integerValue] > 11) ? @"PM" : @"AM";    

  return [NSString stringWithFormat:@"%@:%@ %@", hour, minute, tail];    
}
1 голос
/ 21 января 2014

Вы можете попробовать это. Это работает для меня

    NSDateFormatter* df = [[NSDateFormatter alloc] init];
    [df setLocale:[[NSLocale alloc] initWithLocaleIdentifier:@"en_US"]];
    [df setTimeZone:[NSTimeZone systemTimeZone]];
    [df setDateFormat:@"yyyy-mm-dd hh:mm:ss"];

    NSDate* newDate = [df dateFromString:[df stringFromDate:[NSDate date]]];
    [df setDateFormat:@"hh:mm a"];
    newDate = [df stringFromDate:[NSDate date]];
0 голосов
/ 28 октября 2010

проверьте, что ваши минуты меньше 720 (12 часов), если это так, то это AM, если не его PM (так что вы бы делали часы -12, чтобы перейти от военных к 12h), то добавьте суффикс по мере необходимости. Это не красиво, но это относительно простая работа форматирования.

...