Come ottenere la data odierna nel formato gregoriano quando il calendario del telefono è non aggregato?
-
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!
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];