Sembra una cosa semplice ma non riesco a trovare un modo per farlo.
Sarebbe bello vedere un paio di metodi diversi.
Sembra una cosa semplice ma non riesco a trovare un modo per farlo.
Sarebbe bello vedere un paio di metodi diversi.
Risposte:
@ La risposta di Chuck è corretta e conducimi al seguente codice. Ho pensato di condividere:
NSDateComponents *comps = [[NSDateComponents alloc] init];
[comps setDay:10];
[comps setMonth:10];
[comps setYear:2010];
NSDate *date = [[NSCalendar currentCalendar] dateFromComponents:comps];
Puoi usarlo
NSString *dateString = @"03-Sep-11";
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
dateFormatter.dateFormat = @"dd-MMM-yy";
NSDate *date = [dateFormatter dateFromString:dateString];
Spero che questo ti possa aiutare.
Gli esempi sono spesso il modo più semplice per imparare. Ecco alcuni esempi.
Questo è il più semplice.
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)
Esistono anche altri modi per creare le date. Se vuoi imparare quelli e come visualizzare una data, vedi la mia risposta più completa .
Consulta la documentazione per NSDate . È possibile utilizzare il dateFromString:
metodo NSDateFormatter
o il dateFromComponents:
metodo di NSCalendar
.
init
?
Ho trovato questo thread mentre cercavo una risposta a questa domanda, ma poi ho trovato un buon esempio in un mio libro di programmazione Objective-C di Big Nerd Ranch. Ringraziamo loro, non me.
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];
È ridicolo, no?
Metà del 2013 e Apple ancora non ha fornito un modo semplice per impostare un valore NSDate.
Durante il mio attuale progetto sull'iPad, non potevo credere di dover interrompere la produttività per un po 'per scrivere la mia classe di supporto per ottenere il valore dell'anno da un NSDate. Voglio dire, dai, questa è roba di base.
Ad ogni modo, ecco la classe helper che ho usato nel mio progetto, per convertire una stringa in un valore 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
Usando questo codice, puoi impostare un valore NSDate usando qualcosa come:
NSDate* date = [DateHelper parseDateString:@"Jul 16, 2013"];
Nota: questa funzione era basata sul codice preso da qui: https://stackoverflow.com/a/3968411/391605
La mia soluzione era stata quella di utilizzare il codice seguente, ma ho scoperto che a volte non veniva analizzato e restituiva zero .
// 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];
Ricordo che è fallito miseramente il "12 ottobre 2012" ... motivo per cui ho rinunciato e ho usato la funzione più complicata "parseDateString" mostrata sopra.
Il mio punto è ... stai attento.
Alcune delle funzioni NSDate di base semplicemente non funzionano correttamente ...
setHour
,setMinute
,setSecond
, ecc per più fine granularità.