2010-04-05 12 views

Respuesta

194

@ La respuesta de Chuck es correcta y me lleva al siguiente código. Pensé en compartir:

NSDateComponents *comps = [[NSDateComponents alloc] init]; 
[comps setDay:10]; 
[comps setMonth:10]; 
[comps setYear:2010]; 
NSDate *date = [[NSCalendar currentCalendar] dateFromComponents:comps]; 
+7

Tenga en cuenta que también hay 'setHour',' setMinute', 'setSecond', etc. para una granularidad más fina. – devios1

8

consulte la documentación de NSDate. Puede usar el método dateFromString: de NSDateFormatter o el dateFromComponents: método de NSCalendar.

+0

Sigo recibiendo esta fecha: "1969-12-31 16:00:00" -0800 al usar la fecha de la cadena – nickthedude

+0

NSDateFormatter * dateFormatter = [[NSDateFormatter alloc] init]; NSDate * capturedStartDate = [dateFormatter dateFromString: @ "Jan 2, 2001"]; NSLog (@ "% @", [capturedStartDate description]); de salida: 2010-04-05 10: 49: 47.688 Calendar2 [21339: 207] 1969-12-31 16:00:00 -0800 – nickthedude

+0

Tal vez es necesario configurar algunos parámetros en la fecha formateada en lugar de llanura 'init'? – zoul

16

Si estamos hablando de una fecha del calendario específico en lugar de una fecha UNIXy, es probable que quieren NSCalendar de dateFromComponents:.

18

Puede utilizar esta

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

Hope esto le ayudará a cabo.

+0

Tenga cuidado al usar la función "dateFromString" - Encontré que con algunas fechas perfectamente válidas, fallaría miserablemente. Ver mi publicación a continuación para una forma alternativa de analizar cadenas de fechas. –

+0

La forma en que Oded Ben menciona es también otra mejor forma ... NSDateComponents * comps = [[NSDateComponents alloc] init]; [comps setDay: 10]; [comps setMonth: 10]; [comps setYear: 2010]; NSDate * date = [[NSCalendar currentCalendar] dateFromComponents: comps]; – kamleshwar

2

Es ridículo, ¿no?

mediados de 2013 y Apple todavía no ha proporcionado una manera simple de establecer un valor de NSDate.

Durante mi proyecto actual iPad, no podía creer que tuviera que parar la productividad durante un tiempo para escribir mi propia clase de ayuda para obtener el valor de un año NSDate. Quiero decir, vamos, esto es básico.

De todos modos, aquí está la clase de ayuda que utilicé en mi proyecto, para convertir una cadena en un valor 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 este código, se puede establecer un valor NSDate usando algo como:

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

Nota: esta función se basa en código tomado de aquí: https://stackoverflow.com/a/3968411/391605

Mi solución tenían sido para usar el siguiente código, pero encontré que a veces, simplemente no analizaría, y devolvería 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 recuerdo fracasó rotundamente en "12 Oct 2012" ... por lo que me di por vencido y se utiliza la función más complicada "parseDateString" se muestra arriba.

Mi punto es ... ten cuidado.

Algunas de las funciones muy básicas NSDate simplemente no funcionan correctamente ...

3

he encontrado este hilo, mientras que en busca de una respuesta a esta pregunta, pero luego encontré un buen ejemplo de una gran Nerd Ranch mi Libro de programación de Objective-C. Gracias a ellos, no a mí.

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]; 
6

Ejemplos Swift

ejemplos son a menudo la forma más fácil de aprender. Aquí están algunos ejemplos.

Ahora

Esta es la más fácil.

let currentDateTime = Date() 

20 de febrero de, 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 de abril de, 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) 

necesita más detalles ...?

También hay otras maneras de crear fechas. Si desea conocerlos, así como cómo mostrar una fecha, entonces see my fuller answer.

Cuestiones relacionadas