Come ottenere la data odierna nel formato gregoriano quando il calendario del telefono è non aggregato?

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

  •  28-10-2019
  •  | 
  •  

Domanda

NSDate *now = [[NSDate alloc] init];  

dà la data corrente.

Tuttavia, se il calendario del telefono non è gregoriano (sull'emulatore c'è anche giapponese e buddista), la data attuale non sarà gregoriana.

La domanda ora è come convertire in una data gregoriana o assicurarsi che sia nel formato gregoriano dall'inizio. Questo è cruciale per alcune comunicazioni server.

Grazie!

È stato utile?

Soluzione

NSDATE rappresenta solo un punto nel tempo e non ha un formato in sé.

Per formattare un nsdate per ad esempio una stringa, è necessario utilizzare NSDateFormatter. Ha una proprietà del calendario e se si imposta questa proprietà su un'istanza di un calendario gregoriano, il formato output corrisponderà a uno stile 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];

Altri suggerimenti

La risposta scelta in realtà non riesco a confrontarli. Solo la visualizzazione non è sufficiente per il mio progetto.

Alla fine ho escogitato una soluzione che Covert (NSDate) CurrentDate -> Gregoriandato quindi possiamo confrontare quelle nsdate.

Ricorda solo che le nsdate dovrebbero essere usate temporaneamente. (Non si attacca con nessun 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];
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top