Estoy tratando de lograr una sincronización dropBox y necesito comparar las fechas de dos archivos. Uno está en mi cuenta de dropBox y el otro está en mi iPhone.
Se me ocurrió lo siguiente, pero obtengo resultados inesperados. Supongo que estoy haciendo algo fundamentalmente incorrecto al comparar las dos fechas. Simplemente usé los operadores> <, pero supongo que esto no es bueno ya que estoy comparando dos cadenas NSDate. Aquí vamos:
NSLog(@"dB...lastModified: %@", dbObject.lastModifiedDate);
NSLog(@"iP...lastModified: %@", [self getDateOfLocalFile:@"NoteBook.txt"]);
if ([dbObject lastModifiedDate] < [self getDateOfLocalFile:@"NoteBook.txt"]) {
NSLog(@"...db is more up-to-date. Download in progress...");
[self DBdownload:@"NoteBook.txt"];
NSLog(@"Download complete.");
} else {
NSLog(@"...iP is more up-to-date. Upload in progress...");
[self DBupload:@"NoteBook.txt"];
NSLog(@"Upload complete.");
}
Esto me dio el siguiente resultado (aleatorio e incorrecto):
2011-05-11 14:20:54.413 NotePage[6918:207] dB...lastModified: 2011-05-11 13:18:25 +0000
2011-05-11 14:20:54.414 NotePage[6918:207] iP...lastModified: 2011-05-11 13:20:48 +0000
2011-05-11 14:20:54.415 NotePage[6918:207] ...db is more up-to-date.
o este que resulta ser correcto:
2011-05-11 14:20:25.097 NotePage[6903:207] dB...lastModified: 2011-05-11 13:18:25 +0000
2011-05-11 14:20:25.098 NotePage[6903:207] iP...lastModified: 2011-05-11 13:19:45 +0000
2011-05-11 14:20:25.099 NotePage[6903:207] ...iP is more up-to-date.
iphone
objective-c
cocoa-touch
nsdate
no importa
fuente
fuente
Respuestas:
Asumamos dos fechas:
Entonces la siguiente comparación dirá cuál es anterior / posterior / igual:
Consulte la documentación de la clase NSDate para obtener más detalles.
fuente
date1 -> date2
ascendente / descendente (y, por lo tanto, date1 es posterior o anterior, respectivamente).Tarde a la fiesta, pero otra forma fácil de comparar objetos NSDate es convertirlos en tipos primitivos que permitan un uso fácil de '>' '<' '==' etc.
p.ej.
timeIntervalSinceReferenceDate
convierte la fecha en segundos desde la fecha de referencia (1 de enero de 2001, GMT). ComotimeIntervalSinceReferenceDate
devuelve un NSTimeInterval (que es un typedef doble), podemos usar comparadores primitivos.fuente
(NSComparisonResult)compare:(NSDate *)
pero aún bastante detallado para esta operación simple ... (como de costumbre)[dateA timeIntervalSinceDate:dateB] > 0
En Swift, puede sobrecargar los operadores existentes:
A continuación, puede comparar directamente con NSDates
<
,>
y==
(ya es compatible).fuente
{ ... }
NSDate
Tiene una función de comparación.compare:
Devuelve unNSComparisonResult
valor que indica el orden temporal del receptor y otra fecha dada.Parámetros :
anotherDate
la fecha con la que se compara el receptor. Este valor no debe ser nulo. Si el valor es nulo, el comportamiento es indefinido y puede cambiar en futuras versiones de Mac OS X.Valor de retorno:
NSOrderedSame
NSOrderedDescending
NSOrderedAscending
.fuente
Desea utilizar la comparación NSDate :, laterDate :, beforeDate :, o isEqualToDate: métodos. Usar los operadores <y> en esta situación es comparar los punteros, no las fechas
fuente
Esto devuelve el anterior del receptor y otroDate. Si ambos son iguales, se devuelve el receptor.
fuente
cDate = [aDate earlierDate:bDate]
entoncescDate == aDate
ycDate == bDate
ambos pueden ser verdad. Encontré esto haciendo un trabajo de fecha en iOS 8.-earlierDate:
(y-laterDate:
) no pueden devolver ni el receptor ni el argumento.Algunas utilidades de fechas, incluidas las comparaciones EN INGLÉS, lo cual es bueno:
La implementación:
fuente
Deberías usar :
para comparar fechas. No hay sobrecarga del operador en el objetivo C.
fuente
¿Por qué no usan estos
NSDate
métodos de comparación?fuente
Me he encontrado con casi la misma situación, pero en mi caso estoy verificando si el número de días es diferente
Útil cuando necesita comparar NSDate en días / mes / año
fuente
Puedes comparar dos fechas por este método también
fuente
Lo he intentado espero que funcione para ti
fuente
Use esta función simple para comparar fechas
fuente