Formatage de NSDate en styles particuliers pour l'année, le mois, le jour et l'heure, la minute, les secondes

132

J'ai essentiellement besoin d'obtenir la date et l'heure actuelles séparément, au format:

26/04/2009 
11:06:54

Le code ci-dessous, à partir d'une autre question sur le même sujet, génère

maintenant: | 2009-06-01 23:18:23 +0100 | 
dateString: | 01 juin 2009 23:18 | 
analysé: | 2009-06-01 23:18:00 +0100 |

C'est presque ce que je recherche, mais je veux séparer le jour et l'heure.

NSDateFormatter *format = [[NSDateFormatter alloc] init];
[format setDateFormat:@"MMM dd, yyyy HH:mm"];

NSDate *now = [[NSDate alloc] init];

NSString *dateString = [format stringFromDate:now];

NSDateFormatter *inFormat = [[NSDateFormatter alloc] init];
[inFormat setDateFormat:@"MMM dd, yyyy"];

NSDate *parsed = [inFormat dateFromString:dateString];

NSLog(@"\n"
"now:        |%@| \n"
"dateString: |%@| \n"
"parsed:     |%@|", now, dateString, parsed);
bcsantos
la source
1
Dans un cas comme celui-ci où vous avez pris le temps d'écrire le code que vous avez fini par utiliser pour résoudre le problème, je le collerais probablement (dans ce cas, tout ce qui est sous edit2) dans une réponse plutôt que dans une modification de votre message. Ce n'est pas grand-chose de toute façon, mais cela rend un peu plus facile de trouver / voir que c'est une solution à la question.
Lawrence Johnston

Réponses:

72

Les chaînes au format iPhone sont au format Unicode . Derrière le lien se trouve un tableau expliquant ce que signifient toutes les lettres ci-dessus afin que vous puissiez créer les vôtres.

Et bien sûr, n'oubliez pas de publier vos formateurs de date lorsque vous en avez terminé avec eux. Le code ci - dessus fuites format, nowet inFormat.

Rob Napier
la source
Il fuit même avec ARC activé?
Dimme
19
Ce qui précède n'aura aucune fuite sous ARC (bien sûr, ARC n'était pas disponible en 2009 lorsque nous avons eu cette discussion).
Rob Napier
194

c'est ce que j'ai utilisé:

NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
[dateFormat setDateFormat:@"yyyy-MM-dd"];

NSDateFormatter *timeFormat = [[NSDateFormatter alloc] init];
[timeFormat setDateFormat:@"HH:mm:ss"];

NSDate *now = [[NSDate alloc] init];

NSString *theDate = [dateFormat stringFromDate:now];
NSString *theTime = [timeFormat stringFromDate:now];

NSLog(@"\n"
      "theDate: |%@| \n"
      "theTime: |%@| \n"
      , theDate, theTime);

[dateFormat release];
[timeFormat release];
[now release];
bcsantos
la source
12

vous pouvez utiliser cette méthode, il suffit de lui transmettre votre date

-(NSString *)getDateFromString:(NSString *)string
{

    NSString * dateString = [NSString stringWithFormat: @"%@",string];

    NSDateFormatter* dateFormatter = [[NSDateFormatter alloc] init];
    [dateFormatter setDateFormat:@"your current date format"];
    NSDate* myDate = [dateFormatter dateFromString:dateString];

    NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
    [formatter setDateFormat:@"your desired format"];
    NSString *stringFromDate = [formatter stringFromDate:myDate];

    NSLog(@"%@", stringFromDate);
    return stringFromDate;
}
gourou
la source
11
    NSDateFormatter *dateformat = [[NSDateFormatter alloc] init];
    [dateformat setDateFormat:@"Your Date Format"];

définir le format à renvoyer est ....

yyyy-MM-dd2015-12-17date de retour

yyyy-MMM-dd2015-Dec-17date de retour

yy-MM-dd15-12-17date de retour

dd-MM-yy17-12-15date de retour

dd-MM-yyyy17-12-2015date de retour

yyyy-MMM-dd HH:mm:ss2015-Dec-17 08:07:13date et heure de retour

yyyy-MMM-dd HH:mm2015-Dec-17 08:07date et heure de retour

Pour plus de détails Données et format de l'heure pour Cliquez maintenant.

Je vous remercie.....

PT Vyas
la source
1
Veuillez fournir une description supplémentaire avec l'exemple de code.
Maciej Lach
J'ai cette date '2018-06-08T07: 30: 05.391Z' j'ai essayé 'yyyy-MM-dd'T'HH: mm: ss.000Z' mais obtenant une valeur nulle.
Pramod Tapaniya
4

rien de nouveau mais je veux quand même partager ma méthode:

+(NSString*) getDateStringFromSrcFormat:(NSString *) srcFormat destFormat:(NSString *)
destFormat scrString:(NSString *) srcString
{
    NSString *dateString = srcString;
    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
    //[dateFormatter setDateFormat:@"MM-dd-yyyy"];
    [dateFormatter setDateFormat:srcFormat];
    NSDate *date = [dateFormatter dateFromString:dateString];

    // Convert date object into desired format
    //[dateFormatter setDateFormat:@"yyyy-MM-dd"];
    [dateFormatter setDateFormat:destFormat];
    NSString *newDateString = [dateFormatter stringFromDate:date];
    return newDateString;
}
gndp
la source
3

Pour rapide

var dateString:String = "2014-05-20";
var dateFmt = NSDateFormatter()
// the format you want
dateFmt.dateFormat = "yyyy-MM-dd"
var date1:NSDate = dateFmt.dateFromString(dateString)!;

la source
0

Swift 3

extension Date {
    
    func toString(template: String) -> String {
        let formatter = DateFormatter()
        formatter.dateFormat = DateFormatter.dateFormat(fromTemplate: template, options: 0, locale: NSLocale.current)
        return formatter.string(from: self)
    }
    
}

Usage

let now = Date()
let nowStr0 = now.toString(template: "EEEEdMMM") // Tuesday, May 9
let nowStr1 = now.toString(template: "yyyy-MM-dd") // 2017-05-09
let nowStr2 = now.toString(template: "HH:mm:ss") // 17:47:09

Jouez avec le modèle pour répondre à vos besoins. Exemples et doc ici pour vous aider à créer le modèle dont vous avez besoin.

Remarque

Vous voudrez peut-être le mettre en cache DateFormattersi vous prévoyez de l'utiliser TableViewpar exemple. Pour donner une idée, boucler plus de 1000 dates m'a pris 0,5 seconde avec la toString(template: String)fonction ci-dessus , contre 0,05 seconde avec myFormatter.string(from: Date).

frouo
la source
Pour rendre cette note plus forte (car c'est très important), vous pouvez refactoriser votre fonction pour prendre un paramètre facultatif avec une valeur par défaut de la nouvelle instance. Je ne sais pas pourquoi vous avez obtenu un vote négatif, alors je vote pour.
Vive
-6
NSDate *date         = [NSDate date];
NSDateFormatter *df = [[NSDateFormatter alloc] init];
[df setDateFormat:@"yyyy-MM-dd"]
NSString *dateString  = [df stringFromDate:date];
[df setDateFormat:@"hh:mm:ss"];
NSString *hoursString = [df stringFromDate:date];

C'est tout, vous avez tout ce que vous voulez.

Nikesh K
la source