Domanda

Sembra una cosa semplice, ma io non riesco a trovare un modo per farlo.

Sarebbe bello vedere un paio di metodi diversi.

È stato utile?

Soluzione

@ risposta di Chuck è corretta, e mi ha portato 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];

Altri suggerimenti

È possibile utilizzare questo

NSString *dateString = @"03-Sep-11";
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
dateFormatter.dateFormat = @"dd-MMM-yy";
NSDate *date = [dateFormatter dateFromString:dateString];

Spero che questo vi aiuterà fuori.

Se si sta parlando di una data del calendario specifico, piuttosto che una data Unixy, probabilmente si desidera dateFromComponents: di NSCalendar.

Swift Esempi

Gli esempi sono spesso il modo più semplice per imparare. Ecco alcuni esempi.

Ora

Questo è il modo più semplice.

let currentDateTime = Date()

20 febbraio 2017

// 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)

1 aprile 1976

// 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)

bisogno di maggiori dettagli ...?

Ci sono altri modi per creare le date, anche. Se volete saperne di quelli, così come il modo per Display una data, quindi vedere la mia risposta più completa .

Vedere la documentazione per NSDate . È possibile utilizzare il dateFromString: metodo NSDateFormatter o dateFromComponents: metodo NSCalendar

Ho trovato questa discussione mentre alla ricerca di una risposta a questa domanda, ma poi ho trovato un buon esempio in una mia Big Nerd Ranch Objective-C Programming libro. Credito a loro, non a 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];

E 'ridicolo, non è vero?

metà del 2013 e Apple ancora non ha fornito un modo semplice per impostare un valore NSDate.

Durante il mio progetto iPad corrente, non riuscivo a credere che ho dovuto produttività fermata per un po 'per scrivere la mia classe di supporto per ottenere il valore da un anno NSDate. Voglio dire, andiamo, questa è roba di base.

In ogni caso, ecco la classe di supporto 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

Con questo codice, è possibile impostare un valore di NSDate usando qualcosa come:

NSDate* date = [DateHelper parseDateString:@"Jul 16, 2013"];

Nota: questa funzione è basata su codice preso da qui: https://stackoverflow.com/a/3968411/391605

La mia soluzione era stato per utilizzare il seguente codice, ma ho trovato che a volte , semplicemente non sarebbe analizzare, e sarebbero tornati 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];

Lo ricordo fallito miseramente su "12 ottobre 2012" ... che è il motivo per cui ho rinunciato e usato la funzione più complicata "parseDateString" mostrato sopra.

Il mio punto è ... attenzione.

Alcune delle funzioni molto-base NSDate semplicemente non funzionano correttamente ...

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top