Question iOS: commutation entre les heures 12/24 des chaînes


Problème intéressant qui m'a surpris.

Je reçois des temps de chaîne d'un serveur à un périphérique. que je convertis ensuite en NSDate. Lorsque l'appareil était configuré pour afficher 24 heures sur 24, la vie était bonne.

Maintenant, je le teste sur un appareil réglé sur 12 heures. tout a cessé de fonctionner. Les dates reviennent comme nulles

J'ai d'abord eu

 NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
 [dateFormat setDateFormat:@"HH:mm"];
 self.startTime = [dateFormat dateFromString:(NSString *)self.startTime];

Travaillé parfaitement pour les appareils affichant des dates 24 heures mais pas 12 heures.

J'ai alors essayé

 NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
 [dateFormat setDateFormat:@"hh:mm"];
 self.startTime = [dateFormat dateFromString:(NSString *)self.startTime];

Cela fonctionne bien jusqu'à midi, alors toutes les dates sont retournées comme null

Mettre à jour

J'ai aussi essayé d'ajouter "a" mais cela aboutit toujours à renvoyer null

 if (startDate == nil)
 {
      NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
      [dateFormat setDateFormat:@"hh:mm a"];
      startDate = [dateFormat dateFromString:(NSString *)self.startTime];
 }

Mise à jour 2

Ajouter local, en ajoutant: ss en ajoutant un tout ne fonctionne toujours pas

NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
NSLocale *twelveHourLocale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"];
dateFormat.locale = twelveHourLocale;
[dateFormat setDateFormat:@"hh:mm a"];
startDate = [dateFormat dateFromString:(NSString *)self.startTime];

15
2017-08-15 13:48


origine


Réponses:


C'est proche ... Je pense que vous avez besoin de:

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
NSLocale *locale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"];
[dateFormatter setLocale:locale];
[dateFormatter setDateFormat:@"HH:mm"];
startDate = [dateFormatter dateFromString:(NSString *)self.startTime];

18
2017-08-15 15:06



Vous pouvez essayer ceci

    12 to 24 hour format


    NSDateFormatter* df = [[NSDateFormatter alloc] init];
    [df setLocale:[[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"]];
    [df setTimeZone:[NSTimeZone systemTimeZone]];
    [df setDateFormat:@"hh:mm a"];
    NSDate* newDate = [df dateFromString:LocationTrackingStartTime];
    [df setDateFormat:@"HH:mm"];
    newDate = [df stringFromDate:newDate];

   24 to 12 hour format

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

7
2018-01-22 06:27



Vous devez ajouter am / pm:

NSLocale *twelveHourLocale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"];
dateFormat.locale = twelveHourLocale;
[dateFormat setDateFormat:@"hh:mm: a"];

4
2017-08-15 14:15



Changer le format 24 heures au format 12 heures,

    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
    //Set 24 hours date format
    dateFormatter.dateFormat = @"HH:mm";

    //Here @"your24hours date string" is your string date with 24 hours format
    NSDate *date = [dateFormatter dateFromString:@"your24hours date string"];

    //Set 12 hours date format
    dateFormatter.dateFormat = @"hh:mm a";
    NSString *strDate = [dateFormatter stringFromDate:date];

    NSLog (@"%@", strDate);

   //Output is in 12 hours date format.

2
2018-04-15 14:34



Vous vouliez convertir un NSDate être forcé de NSString à un NSDate encore. Vous devez d'abord le convertir en et NSString, pas forcer!

Je supporte également les formats 12 et 24 heures et je n'ai aucun problème avec ça.


1
2017-08-15 15:03



NSDateFormatter* df = [[NSDateFormatter alloc]init];

[df setLocale:[[NSLocale alloc] initWithLocaleIdentifier:@"en_US"]];
[df setTimeZone:[NSTimeZone systemTimeZone]];    
[df setDateFormat:@"MM/dd/yyyy hh:mm a"];

NSDate* newDate = [df dateFromString:strDate4Convert];    
[df setDateFormat:@"MM/dd/yyyy HH:mm:ss"];    
 NSString *newTimeStr = [df stringFromDate:newDate];

1
2017-12-18 05:40



   You just need to set the locale to take the am pm format. And everything else as usual.

    NSDateFormatter * df = [[NSDateFormatter alloc]init];
    NSLocale *locale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"]; 
    [df setLocale:locale];
    [df setDateStyle:NSDateFormatterNoStyle];
    [df setTimeStyle:NSDateFormatterShortStyle];
    NSLog(@"%@", [df stringFromDate:pickUpDate]);

1
2017-10-01 06:39