¿Cómo obtener la fecha de hoy en el formato gregoriano cuando el calendario telefónico no es gregeriano?
-
28-10-2019 - |
Pregunta
NSDate *now = [[NSDate alloc] init];
da la fecha actual.
Sin embargo, si el calendario del teléfono no es gregoriano (en el emulador también hay japonés y budista), la fecha actual no será gregoriana.
La pregunta ahora es cómo convertir a una fecha gregoriana o asegurarse de que esté en el formato gregoriano desde el principio. Esto es crucial para alguna comunicación del servidor.
¡Gracias!
Solución
NSDATE solo representa un punto en el tiempo y no tiene formato en sí mismo.
Para formatear un NSDATE para, por ejemplo, una cadena, debe usar NSDateFormatter. Tiene una propiedad de calendario, y si establece esta propiedad en una instancia de un calendario gregoriano, el formato salido coincidirá con un estilo gregoriano.
NSDate *now = [NSDate date];
NSCalendar *gregorianCalendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setCalendar:gregorianCalendar];
[formatter setDateStyle:NSDateFormatterFullStyle];
[formatter setTimeStyle:NSDateFormatterFullStyle];
NSString *formattedDate = [formatter stringFromDate:now];
NSLog(@"%@", formattedDate);
[gregorianCalendar release];
[formatter release];
Otros consejos
La respuesta elegida en realidad no puedo compararlas. Solo la pantalla no es suficiente para mi proyecto.
Finalmente, se me ocurrió una solución que Current (NSDate) CurrentDate -> Gregoriandate, entonces podemos comparar esos nsdates.
Solo recuerde que los nsdates deben usarse temporalmente (no se adjunta con ningún calendario)
NSDate* currentDate = [NSDate date];
NSCalendar *gregorianCalendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
NSDateComponents *gregorianComponents = [gregorianCalendar components:NSYearCalendarUnit|NSMonthCalendarUnit|NSDayCalendarUnit fromDate:currentDate];
NSDateComponents *comps = [[NSDateComponents alloc] init];
[comps setDay:[gregorianComponents day]];
[comps setMonth:[gregorianComponents month]];
[comps setYear:[gregorianComponents year]];
[comps setHour:[gregorianComponents hour]];
[comps setMinute:[gregorianComponents minute]];
[comps setSecond:[gregorianComponents second]];
NSCalendar *currentCalendar = [NSCalendar autoupdatingCurrentCalendar];
NSDate *today = [currentCalendar dateFromComponents:comps];