2012-06-16 17 views
20

Mam następujący kod.NSDateFormatter w trybie 12-godzinnym

NSDateFormatter *df = ...; 
[df setTimeZone:[NSTimeZone defaultTimeZone]]; 
[df setDateFormat:@"yyyy-MM-dd'T'HH:mm:ss.SSSZZZ"]; 
NSDate * date = [df dateFromString:date_string]; //here is the problem 

W trybie 24-godzinnym wszystko jest w porządku. Gdy tryb 12-godzinny jest ustawiony na urządzeniu, stringFromDate zwraca wartość null. Format date_string jest taki sam przez cały czas, również format daty. Dlaczego tak się dzieje?

+0

u można wyświetlić wartość DATE_STRING! – Dinesh

+0

2012-06-16T10: 00: 47.436 + 0000 na przykład – Sergey

+0

Zobacz [ten post] (http://stackoverflow.com/q/6613110/581994). –

Odpowiedz

30

spróbuj ustawić ustawienia regionalne w ten sposób:

NSLocale *twelveHourLocale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"]; 
df.locale = twelveHourLocale; 

Aby wymusić zamiast do 24 godzin, można użyć:

NSLocale *twentyFour = [[NSLocale alloc] initWithLocaleIdentifier:@"en_GB"]; 
+0

Chciałbym wymusić format daty, aby zignorować tryb 12-godzinny i cały czas korzystać z 24-godzinnego. Jakiego identyfikatora powinienem użyć? – Sergey

+0

pl_PL -> NSLocale * formatterLocale = [[[NSLocale alloc] initWithLocaleIdentifier: @ "en_GB"] autorelease]; – aleroot

+0

Genialny! Działa jak marzenie. – Fogmeister

49

W swoim NSDateFormatter "yyyy-MM-dd'T'HH:mm:ss.SSSZZZ"HH podpórek 24 godziny i hh trybuny na 12 godziny

+0

Chcę zignorować 12-godzinne ustawienia systemu i nie wiem jak – Sergey

+5

@Sergey następnie użyć ** hh ** zamiast ** HH ** –

+1

Jeśli ustawię hh, wtedy gdy otrzymam 14:55 to nie zadziała – Sergey

6

tryb 12 godzin do 24 godzin w trybie:

NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; 
[formatter setDateFormat:@"hh:mm a"]; 
NSDate *amPmDate = [formatter dateFromString:amPmHourString]; 
[formatter setDateFormat:@"HH:mm"]; 
NSString *24HourString = [formatter stringFromDate:amPmDate]]; 

dla trybu 24-godzin do 12 godzinnego trybu prostu zrobić odwrotny

4
NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init]; 
NSLocale *locale = [[[NSLocale alloc] 
       initWithLocaleIdentifier:@"en_US_POSIX"] autorelease]; 
[dateFormat setLocale:locale]; 
Powiązane problemy