¿Cómo obtener la fecha de hoy en el formato gregoriano cuando el calendario telefónico no es gregeriano?

StackOverflow https://stackoverflow.com/questions/6355405

  •  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!

¿Fue útil?

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];
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top