Parece una cosa simple, pero parece que no puedo encontrar la manera de hacerlo.iPhone OS: ¿Cómo creo un NSDate para una fecha específica?
Sería genial ver un par de métodos diferentes.
Parece una cosa simple, pero parece que no puedo encontrar la manera de hacerlo.iPhone OS: ¿Cómo creo un NSDate para una fecha específica?
Sería genial ver un par de métodos diferentes.
@ 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];
consulte la documentación de NSDate. Puede usar el método dateFromString:
de NSDateFormatter
o el dateFromComponents:
método de NSCalendar
.
Sigo recibiendo esta fecha: "1969-12-31 16:00:00" -0800 al usar la fecha de la cadena – nickthedude
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
Tal vez es necesario configurar algunos parámetros en la fecha formateada en lugar de llanura 'init'? – zoul
Si estamos hablando de una fecha del calendario específico en lugar de una fecha UNIXy, es probable que quieren NSCalendar de dateFromComponents:
.
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.
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. –
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
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 ...
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];
ejemplos son a menudo la forma más fácil de aprender. Aquí están algunos ejemplos.
Esta es la más fácil.
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)
También hay otras maneras de crear fechas. Si desea conocerlos, así como cómo mostrar una fecha, entonces see my fuller answer.
Tenga en cuenta que también hay 'setHour',' setMinute', 'setSecond', etc. para una granularidad más fina. – devios1