Как получить строку времени формата 12 часов, когда система настроена на использование формата 24 часа - PullRequest
3 голосов
/ 06 июня 2011

Я хочу получить строку времени, например, «10:00 PM», и для этого я использую NSDateFormatterShortStyle.Однако, когда система настроена на использование 24-часового формата, я получил «22:00».

Кроме того, я хочу получить локализованную временную строку.Например, на китайском я хочу получить «下午 10:00» вместо «10:00 PM».Поэтому я должен использовать [NSLocale currentLocale] и не могу использовать локаль en_US_POSIX.

Пожалуйста, помогите мне получить локализованную 12-часовую строку формата времени.

Мне нужно не толькочасовая часть, а также часть am / pm.Кроме того, часть am / pm может располагаться перед частью часа / минуты или после части часа / минуты в зависимости от локали.Так же, как система отображения времени.Когда система настроена на использование 12-часового формата, это просто.Но когда система использует 24-часовой формат, я просто не могу получить локализованную временную строку 12-часового формата.

Ответы [ 3 ]

14 голосов
/ 06 июня 2011

Ну, это должно работать:

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc]init];
[dateFormatter setDateFormat:[NSDateFormatter dateFormatFromTemplate:@"hh:mm a" options:0 locale:[NSLocale currentLocale]]];
NSString *theTime = [dateFormatter stringFromDate:[NSDate date]];

Это должно дать вам форматировщик даты, который даст дату в 12-часовом формате. Нижний регистр hh обозначает формат часов 1-12. См. Раздел Технического стандарта Unicode # 35 Шаблоны формата даты для получения подробной информации о строке формата.

К сожалению, iOS перезапишет строку формата на основе настройки предпочтения 24-часового формата пользователя. Я не могу найти способ обойти эту настройку, используя форматирование даты Какао. Поскольку в 24-часовом формате будет отсутствовать обозначение am / pm, анализ результирующей строки для преобразования часов больше 12 приведет к появлению неоднозначных строк времени. Поэтому единственные оставшиеся варианты, которые я вижу, это соблюдение 24-часовой настройки предпочтений пользователя или использование другого кода локализации. Вы можете написать свой или найти замену с открытым исходным кодом.

0 голосов
/ 02 сентября 2017

Swift 3.0

    var dateFormatter = DateFormatter()
    dateFormatter.dateFormat = DateFormatter.dateFormat(fromTemplate: "hh:mm a", options: 0, locale: NSLocale.current)
    var theTime: String = dateFormatter.string(from: Date())
0 голосов
/ 06 июня 2011
NSInteger originalHour = hour;
BOOL isPm = YES;
if (hour >= 12) {
    if (hour > 12)
        hour -= 12;
}
else {
    isPm = NO;
}

if (hour == 0)
    hour = 12;
...