salio resumen razones porque mercado historia fracaso objective-c ios nsstring nsdate

objective c - resumen - Objetivo C: calcular el número de días entre dos fechas



razones del fracaso de nokia (6)

Código ObjC:

NSDateComponents *dateComponent = [calender components:NSCalendarUnitDay fromDate:startDate toDate:endDate options:0];

Resultado:

int totalDays = (int)dateComponent.day;

Posible duplicado:
¿Cómo puedo comparar dos fechas? Devolver un número de días.

Tengo dos fechas (como NSString en el formato "aaaa-mm-dd"), por ejemplo:

NSString *start = "2010-11-01"; NSString *end = "2010-12-01";

Me gustaría implementar:

- (int)numberOfDaysBetween:(NSString *)startDate and:(NSString *)endDate { }

¡Gracias!


Este código parece funcionar muy bien en Swift 2:

func daysBetweenDate(startDate: NSDate, endDate: NSDate) -> Int { let calendar = NSCalendar.currentCalendar() let components = calendar.components([.Day], fromDate: startDate, toDate: endDate, options: []) return components.day }


Hay toda una guía para la programación de fecha y hora. Aquí hay una sección relevante que le da una pista sobre qué hacer.

De donde viene el código de ejemplo en la otra pregunta.

Intenta escribir algo basado en eso y luego regresa si tienes preguntas específicas.

Editar

Bueno. Así es como escribiría el código en su forma más básica.

Primero, extendería NSDate.

El archivo de encabezado:

// NSDate+ADNExtensions.h #import <Cocoa/Cocoa.h> @interface NSDate (ADNExtensions) - (NSInteger)numberOfDaysUntil:(NSDate *)aDate; @end

El archivo de implementación:

// NSDate+ADNExtensions.m #import "NSDate+ADNExtensions.h" @implementation NSDate (ADNExtensions) - (NSInteger)numberOfDaysUntil:(NSDate *)aDate { NSCalendar *gregorianCalendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar]; NSDateComponents *components = [gregorianCalendar components:NSDayCalendarUnit fromDate:self toDate:aDate options:0]; return [components day]; } @end

Este es un código muy difícil. No hay error al verificar o validar que la segunda fecha es posterior a la primera.

Y luego lo usaría así (se ejecuta en un entorno recogido de basura de 64 bits):

NSDate *startDate = [NSDate dateWithString:@"2010-11-01 00:00:00 +0000"]; NSDate *endDate = [NSDate dateWithString:@"2010-11-02 00:00:00 +0000"]; NSInteger difference = [startDate numberOfDaysUntil:endDate]; NSLog(@"Diff = %ld", difference);

Es una lástima, porque habría aprendido mucho más publicando su código y los resultados incorrectos y obteniendo ayuda más específica. Pero si solo quieres ser un programador de cortar y pegar; toma este código y buena suerte para ti.


Swift 3:

let formatter = DateFormatter() formatter.dateFormat = "yyyy-MM-dd" let start = formatter.date(from: "2010-09-01")! let end = formatter.date(from: "2010-12-01")! let days = Calendar.current.dateComponents([.day], from: start, to: end).day!


Implementación de Swift 4

Llamada al método:

let numberOfDays = daysBetweenDates(startDate: fileCreatedDate,endDate: date)

Implementación del método:

func daysBetweenDates(startDate: Date, endDate: Date) -> Int { let daysBetween = Calendar.current.dateComponents([.day], from: startDate, to: endDate) print(daysBetween.day!) return daysBetween.day! }

Implementación del Objetivo C:

Método de llamada:

int numberOfDaysSinceFileCreation = [self daysBetweenDates: fileCreatedDate currentDate: today];

Implementación del método:

- (int) daysBetweenDates: (NSDate *)startDate currentDate: (NSDate *)endDate { NSCalendar *calendar = [NSCalendar currentCalendar]; NSDateComponents *dateComponent = [calendar components:NSCalendarUnitDay fromDate:startDate toDate:endDate options:0]; int totalDays = (int)dateComponent.day; return totalDays; }


NSString *start = @"2010-09-01"; NSString *end = @"2010-12-01"; NSDateFormatter *f = [[NSDateFormatter alloc] init]; [f setDateFormat:@"yyyy-MM-dd"]; NSDate *startDate = [f dateFromString:start]; NSDate *endDate = [f dateFromString:end]; NSCalendar *gregorianCalendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSCalendarIdentifierGregorian]; NSDateComponents *components = [gregorianCalendar components:NSCalendarUnitDay fromDate:startDate toDate:endDate options:0];

components ahora tiene la diferencia.

NSLog(@"%ld", [components day]);