web-dev-qa-db-fra.com

Comment obtenir l'heure au format am / pm iphone NSDateFormatter?

Travaille dans une application iPhone avec NSDateFormatter. Je reçois l'heure du webservice comme "00:00:00", "16:00:00","15:30:00" and so on. J'ai besoin de convertir ce temps si le temps est "00:00:00" to "12 AM", si le temps est "16:00:00" to "4 PM", si le temps est "15:30:00" à "15h30". J'ai utilisé le code ci-dessous pour cela, mais quand j'ai passé "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];

Lorsque je passe "00:00:00", il retourne correctement "12h00". Quelqu'un peut-il m'aider s'il vous plaît à résoudre ce problème? Merci d'avance.

53
Gopinath

Si votre format de l'heure est en 24hrs veuillez utiliser "HH:mm:ss" _ format. Veuillez tester le code et laissez-moi savoir s'il fonctionne pour vous. J'ai testé et c'est de retour "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];

Merci.

113
Yuvaraj.M

Vous pouvez utiliser le .ShortStyle qui s'adaptera à la localisation actuelle:

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

Ce qui retourne 17:12 ou 5:12 PM en fonction des paramètres régionaux du périphérique actuel.

22
eliocs

Pourquoi attribuez-vous à nouveau NSDateFormatter?

vous avez juste besoin de le formater à NSDate, puis à nouveau à 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);
15
Charan

Essayez HH:mm:ss (notez les majuscules au format heure)

14
Steven Kramer

Ce code ci-dessous conserve toujours au format 12 heures:

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

Ce toujours garder au format 24 heures

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

J'espère que quelqu'un serait utile qui voudrait l'obtenir à Swift

Pour 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)
8

votre format de date devrait être:

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

vérifier le format de date Dok

3
CarlJ