2015-01-29 8 views
7

chcę przekonwertować do formatu NSTimeInterval jakKonwertuj NSTimeInterval na ciąg w formacie "1w 3d 4h 15m 21s", z ustawieniami regionalnymi?

1w 3d 4h 15m 21s

Jak mogę to osiągnąć w sposób przyjazny dla ustawień regionalnych? Czy istnieje API do kakao do tego celu, a przynajmniej czy istnieje sposób na uzyskanie "w", "d", "h", "m", "s" w ustawieniach narodowych użytkownika?

+0

Czy masz na myśli, że w języku hiszpańskim wynik jest następujący: ** 1s 3d 4h 15m 21s **? Uwaga: (semana = tydzień, dia = dzień, minuto = minuta, Segundo = sekunda) –

+0

tak, dokładnie. Podobnie do tego, w jaki sposób 'NSDateFormatter' używałby również zlokalizowanych formatów i języka. – tenfour

+0

Zawsze można skonstruować ciąg ze zmiennymi zastępczymi i [użyć standardowych operacji "zlokalizowanych ciągów znaków"] (http://stackoverflow.com/a/14984616/581994) do tłumaczenia w razie potrzeby. –

Odpowiedz

11

NSDateComponentsFormatter jest tym, czego potrzebujesz. Może nie produkować dokładnie tego, czego szukasz, ale mam wrażenie, że ma on na celu uzyskanie wyników zgodnych ze standardowymi konwencjami ICU. Rozważmy na przykład w ten sposób:

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]); 

... która produkuje:

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

Tak, to jest trochę inaczej niż np formacie, ale wydaje mi się, że gdzieś głęboko w normach ICU unicode dokumenty, jest określone, że jeśli przerwa ma zarówno tygodnie, jak i sekundy, otrzymujesz "semana" na tygodnie zamiast "s". Nie zamierzam jednak torturować się, próbując znaleźć ten dokument.

Więc jeśli szukasz rozwiązania ICU, to jest to. Jeśli szukasz czegoś innego, możesz utknąć w swoim własnym. Zwróć też uwagę, że istnieje kilka różnych "stylów jednostek", więc możesz spróbować także innych i wybrać ten, który najlepiej pasuje do Twojej sytuacji.

+0

Czy plik NSDateComponentsFormatter nie ma domyślnych ustawień regionalnych urządzenia? –

+0

Domyślnie jest to bieżące ustawienie regionalne, ale możesz je zmienić, tak jak pokazałem w kodzie w mojej odpowiedzi. – ipmcc