2010-10-28 14 views
1

J'affiche actuellement l'heure au format 24h, parce que c'est la chose la plus facile à faire en ce moment avec les données que j'ai. Je reçois l'heure en "minutes depuis minuit", par exemple, 07h00 ou 07h00 est "420" et 21h30 ou 21h30 est "1290" et ainsi de suite.Convertir le format d'heure de 24h à 12h en Obj-C

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

Existe-t-il un moyen agréable d'utiliser NSDateFormatter pour convertir de 24h à 12h? J'ai essayé beaucoup de choses, mais je ne finis jamais avec un formatage correct à 100%.

J'ai aussi essayé avec beaucoup d'instructions if, pour finir avec trop de lignes de code, ce qui devrait être complètement inutile à mon avis pour un travail relativement "facile".

De plus, peu importe ce que j'essaie, je me retrouve aussi avec un mauvais formatage de 12h pendant des heures sans "1" au début, par exemple "09:30", etc. Je peux le supprimer en recherchant le suffixe, mais encore une fois cela semble juste ennuyeux et bizarre.

Répondre

11

Vous devriez vraiment utiliser la mise en forme de date par défaut du système:

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

Ou si vous vous insistez pouvez faire

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

+0

Merci! J'ai fusionné les deux ci-dessus et si l'heure a un préfixe "0", je l'enlève juste. – runmad

+2

Ou vous pouvez définir le format à '@" h: mm un "' (un 'h') – Aleph7

0

vérifiez si vos minutes sont inférieures à 720 (12 heures), si c'est le cas, sinon son PM (donc vous feriez des heures -12 pour passer de militaire à 12h) puis ajoutez le suffixe si nécessaire. Ce n'est pas joli, mais c'est un travail de mise en forme relativement simple.

+0

Ouais, c'est ce que je l'ai fait pour la « si une solution de déclaration » et comme l'a dit; pas joli :) – runmad

+1

mise en page n'est généralement pas .. et ce n'est pas beaucoup de si ... une, peut-être deux. –

4

Pour quelqu'un de nouveau comme moi je me débattais avec la formatter date et a trouvé que [NSCalendar currentCalendar] utilisera les préférences des utilisateurs pour définir le fuseau horaire. Dans ma situation, je voulais convertir un moment donné par un serveur, donc c'était toujours faux. J'ai utilisé cette fonction simple dans mon cas.

- (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];  
} 
+0

il ne change pas l'heure comme AM, PM –

1

Vous pouvez this.It fonctionne pour moi

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

Je donnais @ "HH: mm aa" et il revenait 13 : 45 PM, je l'ai obtenu de votre réponse qu'en utilisant minuscule hh est le format peut retourner 01:45 PM. Merci :) – Yawar