2015-01-29 5 views
7

voglio convertire un NSTimeInterval in un formato simileConverti NSTimeInterval in una stringa nel formato "1w 3d 4h 15m 21s", compatibile con le impostazioni locali?

1W 3d 21s 4h 15m

Come posso raggiungere questo obiettivo in modo locale-friendly? C'è una API di cacao per fare questo, o almeno c'è un modo per ottenere "w", "d", "h", "m", "s" nelle impostazioni locali dell'utente?

+0

Intendi per locale che in spagnolo il risultato sarebbe il seguente: ** 1s 3d 4h 15m 21s **? Nota: (semana = settimana, dia = giorno, minuto = minuto, Segundo = secondo) –

+0

sì, esattamente. Simile a come 'NSDateFormatter' userebbe anche i formati e il linguaggio localizzati. – tenfour

+0

È sempre possibile costruire la stringa con le variabili di sostituzione e [utilizzare le operazioni standard "stringa localizzata"] (http://stackoverflow.com/a/14984616/581994) per tradurre secondo necessità. –

risposta

11

NSDateComponentsFormatter è ciò che desideri. Potrebbe non produrre esattamente quello che stai cercando, ma la mia impressione è che mira a produrre un output conforme alle convenzioni standard ICU. Ad esempio, si consideri questo:

NSDateComponentsFormatter* dcf = [[NSDateComponentsFormatter alloc] init]; 
dcf.unitsStyle = NSDateComponentsFormatterUnitsStyleAbbreviated; 

NSCalendar* cal = [NSCalendar calendarWithIdentifier: NSCalendarIdentifierGregorian]; 
cal.locale = [NSLocale localeWithLocaleIdentifier: @"es_ES"]; // Spanish locale for Spain 

dcf.calendar = cal; 

NSLog(@"%@", [dcf stringFromTimeInterval: 1000000]); 

... che produce:

1 semana, 4 d, 13 h, 46 min, 40 s 

Quindi, questo è un po 'diverso da quello del formato di esempio, ma la mia ipotesi è che da qualche parte nel profondo delle norme ICU unicode documenti, si specifica che se un intervallo ha sia settimane che secondi, si ottiene "semana" per settimane invece di "s". Non ho intenzione di torturarmi cercando comunque di trovare quel documento.

Quindi, se stai cercando la soluzione ICU, è proprio così. Se stai cercando qualcosa di diverso, potresti bloccarti da solo. Nota anche che ci sono alcuni "stili di unità" diversi, quindi potresti provare anche gli altri e scegliere quello più adatto alla tua situazione.

+0

Il valore NSDateComponentsFormatter non è impostato sulle impostazioni internazionali correnti del dispositivo? –

+0

Per impostazione predefinita è la locale corrente, ma è possibile sovrascriverla, come ho mostrato nel codice nella mia risposta. – ipmcc

Problemi correlati