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

Как получить время в формате am/pm iphone NSDateFormatter?

Я работаю в приложении iPhone с использованием NSDateFormatter. Я получаю время от веб-службы, например "00:00:00", "16:00:00","15:30:00" and so on. Мне нужно преобразовать это время в если время "00:00:00" to "12 AM", если время "16:00:00" to "4 PM", если время "15:30:00" до "3.30 PM". Я использовал приведенный ниже код, но когда у меня есть проход "16:00:00" the date returns null.

 NSString *dats1 = @"16:00:00";
 NSDateFormatter *dateFormatter3 = [[[NSDateFormatter alloc] init] autorelease];
 [dateFormatter3 setDateStyle:NSDateFormatterMediumStyle];  
 [dateFormatter3 setDateFormat:@"hh:mm:ss"]; 
 NSDate *date1 = [dateFormatter3 dateFromString:dats1];
 NSLog(@"date1 : %@", date1); **// Here returning (null)**

 NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
 [formatter setDateFormat:@"hh:mm a"];
 NSLog(@"Current Date: %@", [formatter stringFromDate:date1]); **// Here also returning (null)**
 [formatter release];

Когда я прохожу "00:00:00", он возвращается "12 AM" правильно. Может ли кто-нибудь помочь мне решить эту проблему? Спасибо заранее.

4b9b3361

Ответ 1

Если ваш формат времени находится в 24hrs, используйте формат "HH:mm:ss". Пожалуйста, проверьте код и сообщите мне, если он работает на вас. Я тестировал и возвращает "4 PM"

NSString *dats1 = @"16:00:00";
 NSDateFormatter *dateFormatter3 = [[[NSDateFormatter alloc] init] autorelease];
 [dateFormatter3 setDateStyle:NSDateFormatterMediumStyle];  
 [dateFormatter3 setDateFormat:@"HH:mm:ss"]; 
 NSDate *date1 = [dateFormatter3 dateFromString:dats1];
 NSLog(@"date1 : %@", date1); **// Here returning (null)**

NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
 [formatter setDateFormat:@"hh:mm a"];
 NSLog(@"Current Date: %@", [formatter stringFromDate:date1]); **// Here also returning (null)**
 [formatter release];

Спасибо.

Ответ 2

Почему вы снова выделяете NSDateFormatter?

Вам просто нужно отформатировать его до NSDate, а затем снова до NSString,

    NSDateFormatter *dateFormatter = [[[NSDateFormatter alloc] init] autorelease];
    [dateFormatter setDateFormat:@"HH:mm:ss"];

    NSDate *date = [dateFormatter dateFromString:dats1];

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

    NSString *formattedDate = [dateFormatter stringFromDate:date];

    NSLog(@"%@",formattedDate);

Ответ 3

Попробуйте HH:mm:ss (обратите внимание на капители в часовом формате)

Ответ 4

Вы можете использовать .ShortStyle, который будет адаптироваться к текущему языку:

let timeFormatter = NSDateFormatter()
timeFormatter.dateStyle = .NoStyle
timeFormatter.timeStyle = .ShortStyle
timeFormatter.stringFromDate(NSDate())

Возвращает 17:12 или 5:12 PM в зависимости от текущего локали устройства.

Ответ 5

Надеюсь, что кто-то будет полезен, кто хотел бы получить его в Swift

Для Swift

let dateFormatter = NSDateFormatter()
//if some one want 12AM,5PM then use "hh mm a"
//if some one want 00AM,17PM then use "HH mm a"
dateFormatter.dateFormat = "hh mm a"
let stringDate = dateFormatter.stringFromDate(NSDate())
println(stringDate)

Ответ 6

Этот код ниже всегда хранится в формате 12hour:

NSLocale *12hourFomrat = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"];
df.locale = 12hourFomrat;

Это всегда сохраняется в формате 24 часа

NSLocale *24hourFormat = [[NSLocale alloc] initWithLocaleIdentifier:@"en_GB"];
df.locale = 24hourFormat

Ответ 7

Ваш формат даты должен быть:

  [dateFormatter3 setDateFormat:@"HH:mm:ss"]; 

проверьте Формат даты Doku