Come ottenere il tempo in formato am/pm iphone NSDateFormatter?

Sto lavorando in un’app per iPhone con l’utilizzo del NSDateFormatter. Sono sempre il tempo da webservice come "00:00:00", "16:00:00","15:30:00" and so on. Ho bisogno di convertire questi tempi di
se il tempo è "00:00:00" to "12 AM", se il tempo è "16:00:00" to "4 PM", se il tempo è “15:30:00” a “3.30 PM”. Ho utilizzato il seguente codice per questo, ma quando devo passare "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];

Quando sono di passaggio “00:00:00” sta tornando “ore 12” correttamente. Qualcuno può per favore aiutarmi a risolvere questo problema? Grazie in anticipo.

InformationsquelleAutor Gopinath | 2012-07-23



7 Replies
  1. 113

    Se il vostro formato è in 24hrs si prega di utilizzare "HH:mm:ss" formato. Si prega di verificare il codice e fammi sapere se funziona per voi. Ho testato ed è di ritorno "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];

    Grazie.

    • 12:12am qui, ma questo è tornato 12:12 .. Hmmm
    • restituisce 16:00 in ios9
    • aggiungere questo [dateFormatter setLocale:[[NSLocale alloc] initWithLocaleIdentifier:@”en_US_POSIX”]];
  2. 21

    È possibile utilizzare il .ShortStyle che si adatterà alla localizzazione attuale:

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

    Che restituisce 17:12 o 5:12 PM a seconda del dispositivo di corrente locale.

    • Questo dovrebbe essere accettato risposta.
  3. 15

    Perché sei di nuovo l’allocazione del NSDateFormatter ?

    hai Solo bisogno di formattare al NSDate e poi di nuovo a 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);
    • Bellissimo codice… +1, ma penso che prima dateFormatter setDateFormat:@"HH:mm:ss"]; non necessario.
    • È necessario coz’ ha l’ingresso ore formato in formato HH, io.e il formato 24 ore
  4. 8

    Spero che qualcuno sarebbe utile che vorrebbero entrare in Swift

    Per 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)
    • non funziona il mio amico
  5. 8

    Questo di Seguito il codice di tenere sempre in 12 ore formato:

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

    Questo tenere sempre in formato 24 ore

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

Lascia un commento