Cela semble simple mais je n'arrive pas à trouver un moyen de le faire.
Ce serait formidable de voir quelques méthodes différentes.
Cela semble simple mais je n'arrive pas à trouver un moyen de le faire.
Ce serait formidable de voir quelques méthodes différentes.
Réponses:
La réponse de @ Chuck est correcte et m'amène au code suivant. Je pensais que je partagerais:
NSDateComponents *comps = [[NSDateComponents alloc] init];
[comps setDay:10];
[comps setMonth:10];
[comps setYear:2010];
NSDate *date = [[NSCalendar currentCalendar] dateFromComponents:comps];
Vous pouvez utiliser ceci
NSString *dateString = @"03-Sep-11";
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
dateFormatter.dateFormat = @"dd-MMM-yy";
NSDate *date = [dateFormatter dateFromString:dateString];
Espérons que cela va vous aider.
Les exemples sont souvent la manière la plus simple d'apprendre. Voici quelques exemples.
Celui-ci est le plus simple.
let currentDateTime = Date()
// Specify date components
var dateComponents = DateComponents()
dateComponents.year = 2017
dateComponents.month = 2
dateComponents.day = 20
// Create date from components
let userCalendar = Calendar.current // user calendar
let dateThisPostWasUpdated = userCalendar.date(from: dateComponents)
// Specify date components
var dateComponents = DateComponents()
dateComponents.year = 1976
dateComponents.month = 4
dateComponents.day = 1
// Create date from components
let userCalendar = Calendar.current // user calendar
let appleFoundedDate = userCalendar.date(from: dateComponents)
Il existe également d'autres façons de créer des dates. Si vous voulez en savoir plus, ainsi que comment afficher une date, consultez ma réponse plus complète .
Consultez la documentation de NSDate . Vous pouvez utiliser la dateFromString:
méthode de NSDateFormatter
ou la dateFromComponents:
méthode de NSCalendar
.
init
?
J'ai trouvé ce fil en cherchant une réponse à cette question, mais j'ai trouvé un bon exemple dans un de mon livre de programmation Objective-C Big Nerd Ranch. Merci à eux, pas à moi.
NSDateComponents *myBDay =[[NSDateComponents alloc] init];
[myBDay setDay:22];
[myBDay setMonth: 04];
[myBDay setYear: 1984];
[myBDay setHour:9];
[myBDay setMinute:25];
[myBDay setSecond:35];
NSCalendar *g = [[ NSCalendar alloc] initWithCalendarIdentifier:NSCalendarIdentifierGregorian];
NSDate *dateOfBirth = [g dateFromComponents:myBDay];
C'est ridicule, non?
Mi-2013 et Apple n'a toujours pas fourni de moyen simple de définir une valeur NSDate.
Au cours de mon projet iPad actuel, je ne pouvais pas croire que je devais arrêter la productivité pendant un certain temps pour écrire ma propre classe d'aide afin d'obtenir la valeur de l'année d'un NSDate. Je veux dire, allez, ce sont des trucs basiques.
Quoi qu'il en soit, voici la classe d'assistance que j'ai utilisée dans mon projet, pour convertir une chaîne en une valeur NSDate:
@implementation DateHelper
+(NSDate*)parseDateString:(NSString *)dateString
{
NSDateFormatter *rfc3339TimestampFormatterWithTimeZone = [[NSDateFormatter alloc] init];
[rfc3339TimestampFormatterWithTimeZone setLocale:[[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"]];
[rfc3339TimestampFormatterWithTimeZone setDateFormat:@"MMM dd, yyyy"];
NSDate *theDate = nil;
NSError *error = nil;
if (![rfc3339TimestampFormatterWithTimeZone getObjectValue:&theDate forString:dateString range:nil error:&error]) {
NSLog(@"Date '%@' could not be parsed: %@", dateString, error);
}
return theDate;
}
@end
En utilisant ce code, vous pouvez définir une valeur NSDate en utilisant quelque chose comme:
NSDate* date = [DateHelper parseDateString:@"Jul 16, 2013"];
Remarque: cette fonction était basée sur du code tiré d'ici: https://stackoverflow.com/a/3968411/391605
Ma solution avait été d'utiliser le code suivant, mais j'ai trouvé que parfois , il n'analysait tout simplement pas et renvoyait nil .
// Take a date string in the format "Oct 23, 2013", and convert it into a NSDate value
// THIS DOESN'T WORK ! DON'T TRUST THIS CODE !!
NSDateFormatter* formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:@"MMM dd, yyyy"];
[formatter setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0]];
NSDate* date = [formatter dateFromString:dateString];
Je me souviens qu'il a lamentablement échoué le "12 octobre 2012" ... c'est pourquoi j'ai abandonné et utilisé la fonction plus compliquée "parseDateString" montrée ci-dessus.
Mon point est ... soyez prudent.
Certaines des fonctions NSDate très basiques ne fonctionnent tout simplement pas correctement ...
setHour
,setMinute
,setSecond
, etc. pour une granularité plus fine.