2012-07-23 2 views
45

Ich arbeite in einer iPhone App mit dem NSDateFormatter. Ich bekomme die Zeit vom Webservice wie "00:00:00", "16:00:00","15:30:00" and so on. Ich muss diese Zeit zu umwandeln, wenn die Zeit "00:00:00" to "12 AM" ist, wenn die Zeit "16:00:00" to "4 PM" ist, wenn die Zeit "15:30:00" zu "3:30 PM" ist. Ich habe den folgenden Code verwendet, aber wenn ich "16:00:00" the date returns null übergeben habe.Wie bekomme ich die Zeit in am/pm-Format iphone NSDateFormatter?

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]; 

Wenn "00:00:00" übergeben wird, wird "12 AM" korrekt zurückgegeben. Kann mir bitte jemand helfen, dieses Problem zu lösen? Danke im Voraus.

+1

Vielen Dank an alle, die Ihre Antwort posten und mir helfen. Sie sind alle richtig beantwortet und haben mir geholfen, dieses Problem zu lösen. Danke noch einmal. – Gopinath

+2

Ich habe alle Ihre richtigen Antworten aufgewertet. Vielen Dank für Ihre helfende Hand. – Gopinath

+1

Eigentlich hättest du dir etwas Zeit nehmen müssen, um die Dokumentation zu 'NSDateFormatter' zu lesen und du hättest das selbst beantworten können. –

Antwort

104

Wenn Ihr Zeitformat in 24hrs ist bitte "HH:mm:ss"-Format verwenden. Bitte testen Sie den Code und lassen Sie mich wissen, ob es für Sie arbeitet. Ich habe getestet und es wird "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]; 

Dank zurück.

+0

12:12 Uhr hier, aber das ist 12:12 pm zurück.Hmmm –

+0

es gibt 16:00 in ios9 zurück –

+0

@PatelJigar hinzufügen Sie [dateFormatter setLocale: [[NSLocale alloc] initWithLocaleIdentifier: @ "en_US_POSIX"]]; –

16

Warum weisen Sie die NSDateFormatter wieder zu?

Sie müssen es nur NSDate zu formatieren und dann wieder zu 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); 
+0

Netter Code ... +1, aber ich denke zuerst 'dateFormatter setDateFormat: @" HH: mm: ss "];' nicht notwendig. – Dilip

+6

Es ist notwendig, coz 'er hat die Eingabe Stunden Format im HH-Format, d. H. 24-Stunden-Format – Charan

14

HH:mm:ss Versuchen (beachten Sie die Hauptstädte der Stunden-Format)

+4

upvoted für die H vs h. –

7

Hoffnung, jemand würde nützlich sein, um es bekommen möchten in Swift

Für 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) 
+0

es funktioniert nicht mein Freund –

6

Dieser Below Code immer im 12 Stunden-Format:

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

Dies immer hält im 24-Stunden-Format

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

Sie können die .ShortStyle verwenden, die auf das aktuelle Gebietsschema angepasst werden:

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

Welche gibt 17:12 oder 5:12 PM je nach dem aktuellen Gebietsschema des Geräts zurück.

Verwandte Themen