Création de NSDate à partir de NSString
-
13-11-2019 - |
Question
j'ai ce qui suit NSString
:
NSString * dateString = @"2012-01-24T14:59:01Z";
Je veux créer un NSDate
de cette chaîne.J'ai recherché le NSDate
Référence de classe et idée d'utiliser dateWithNaturalLanguageString:
:
Crée et renvoie un
NSDate
objet défini sur la date et l’heure spécifié par une chaîne donnée.
+ (id)dateWithNaturalLanguageString:(NSString *)string
Paramètres chaîne Une chaîne qui contient une spécification familière d’une date, tels que « mardi dernier au dîner », « 15 heures le 31 décembre 2001 », « 31/12/01 », ou « 31/12/01 ». Valeur de retourUn nouveau
NSDate
objet défini sur l’objet courant Date et heure spécifiées par une chaîne.
Cependant, lorsque j'essaie de l'utiliser comme ceci :
NSDate * date = [NSDate dateWithNaturalLanguageString:dateString];
J'obtiens l'erreur suivante :
Aucune méthode de classe connue pour le sélecteur 'dateWithNaturalLanguageString:'
La solution 4
J'ai trouvé exactement ce que je cherchais ici.Il s'agit d'une date-heure RFC 3339.
- (NSString *)userVisibleDateTimeStringForRFC3339DateTimeString:(NSString *)rfc3339DateTimeString
// Returns a user-visible date time string that corresponds to the
// specified RFC 3339 date time string. Note that this does not handle
// all possible RFC 3339 date time strings, just one of the most common
// styles.
{
NSString * userVisibleDateTimeString;
NSDateFormatter * rfc3339DateFormatter;
NSLocale * enUSPOSIXLocale;
NSDate * date;
NSDateFormatter * userVisibleDateFormatter;
userVisibleDateTimeString = nil;
// Convert the RFC 3339 date time string to an NSDate.
rfc3339DateFormatter = [[[NSDateFormatter alloc] init] autorelease];
enUSPOSIXLocale = [[[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"] autorelease];
[rfc3339DateFormatter setLocale:enUSPOSIXLocale];
[rfc3339DateFormatter setDateFormat:@"yyyy'-'MM'-'dd'T'HH':'mm':'ss'Z'"];
[rfc3339DateFormatter setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0]];
date = [rfc3339DateFormatter dateFromString:rfc3339DateTimeString];
if (date != nil) {
// Convert the NSDate to a user-visible date string.
userVisibleDateFormatter = [[[NSDateFormatter alloc] init] autorelease];
assert(userVisibleDateFormatter != nil);
[userVisibleDateFormatter setDateStyle:NSDateFormatterShortStyle];
[userVisibleDateFormatter setTimeStyle:NSDateFormatterShortStyle];
userVisibleDateTimeString = [userVisibleDateFormatter stringFromDate:date];
}
return userVisibleDateTimeString;
}
Autres conseils
La classe NSDateFormatter vous aidera à résoudre ce problème.Et il y a déjà beaucoup de questions à ce sujet, par exemple voici la première : Convertir NSString->NSDate ?
Essayez d'utiliser le constructeur dateWithString
constructeur ou (si cela vous donne une erreur similaire), essayez d'utiliser un NSDateFormatter
comme décrit ici.
Le dateWithNaturalLanguageString:
La méthode class n'est implémentée que sur Mac OS X, pas sur iOS, c'est pourquoi vous obtenez l'erreur.
Pour réaliser ce que vous recherchez, vous avez besoin du NSDateFormatter
classe.Le cours est assez lourd, vous devrez donc d'abord lire la documentation pour comprendre comment l'utiliser au mieux.