2012-06-16 44 views
20

我有以下代碼。NSDateFormatter在12小時模式下

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 

在24小時模式中一切正常。在設備上設置12小時模式時,stringFromDate返回null。 date_string的格式一直都是一樣的,日期格式也一樣。爲什麼會發生?

+0

u能顯示DATE_STRING值! – Dinesh

+0

2012-06-16T10:00:47.436 + 0000 例如 – Sergey

+0

請參閱[本文](http://stackoverflow.com/q/6613110/581994)。 –

回答

30

嘗試設置語言環境是這樣的:

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

若要改爲強制到24小時後,您可以使用:

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

我想強制dateformatter忽略12小時模式並一直使用24小時。我應該使用哪個loc標識符? – Sergey

+0

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

+0

太棒了!奇蹟般有效。 – Fogmeister

49

在你NSDateFormatter "yyyy-MM-dd'T'HH:mm:ss.SSSZZZ"HH代表24小時hh代表12小時

+0

我想忽略12小時系統設置,不知道 – Sergey

+5

@Sergey然後使用** hh **而不是** HH ** –

+1

如果我設置了hh,那麼當我收到14:55時它將不起作用 – Sergey

6

12小時模式至24小時模式:

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

對於24小時模式至12小時模式正好反其道而行之

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