2011-03-12 244 views
12

我有這樣的日期格式:NSD每小時24小時制?

NSDateFormatter *timeFormatter = [[NSDateFormatter alloc] init]; 
[timeFormatter setDateFormat:@"HH:mm"]; 

如果我用這個:

NSDate *myDate = [timeFormatter dateFromString:@"13:00"]; 

它返回:

"1:00" 

這是因爲模擬器已關閉24小時。但是,對於我的應用我真正需要的,而不是"13:00""1:00"

--- 編輯1 ---

增加了新的代碼:

NSCalendar *calendar= [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar]; 
NSCalendarUnit unitFlags = NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit | NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit; 

NSDateFormatter *timeFormatter = [[NSDateFormatter alloc] init]; 
[timeFormatter setDateFormat:@"HH:mm"]; 
NSDate *timeForFirstRow = [timeFormatter dateFromString:@"13:00"]; 
NSDateComponents *dateComponents = [calendar components:unitFlags fromDate:timeForFirstRow]; 
NSInteger hour = [dateComponents hour]; //This will be 1 instead of 13 
NSInteger minute = [dateComponents minute]; 
+0

你能告訴你在哪裏顯示「返回」的代碼? – falconcreek 2011-03-12 17:10:58

回答

25

如果你想用它強制12小時或24小時模式,無論用戶的24/12小時模式設置如何,您都應該將日期格式化程序的區域設置設置爲en_US_POSIX(12小時),或者將en_GB設置爲24小時模式。

也就是說,

NSLocale* formatterLocale = [[[NSLocale alloc] initWithLocaleIdentifier:@"en_GB"] autorelease]; 
[timeFormatter setLocale:formatterLocale]; 

一些更對這裏:

http://developer.apple.com/iphone/library/qa/qa2010/qa1480.html

+0

我玩過你的答案,它現在的作品... – 2011-03-12 17:21:56

+0

感謝這個偉大的解決方案.. – 2011-10-13 18:07:17

+0

真的很棒的解決方案!我沮喪了一次。上帝,我發現這一點。 – 2012-05-03 11:00:28

8

最近我有同樣的問題,連同這個文件,該文件列出了所有的日期格式模式傳來:http://unicode.org/reports/tr35/tr35-6.html#Date_Format_Patterns

我能夠通過使用k:mm作爲日期格式獲得24次工作:

NSDateFormatter *format = [[NSDateFormatter alloc] init]; 
[format setDateFormat:@"k:mm"]; 
1

Apple Documentation開始,時間格式字符串遵循Unicode Technical Standard #35

正如UTR#35所述,大寫HH爲您提供24小時時間,而小寫字母hh爲您提供12小時的時間。

總之,如果需要24小時的風格,使用[timeFormatter setDateFormat:@"HH:mm"];如果你需要12小時的風格,使用[timeFormatter setDateFormat:@"hh:mm"];

+2

根據[Apple文檔](https://developer.apple.com/library/ios/documentation/Cocoa/Conceptual/DataFormatting/Articles/dfDateFormatting10_4.html#//apple_ref/doc/uid/TP40002369-SW13):「在iOS中,用戶可以覆蓋默認的AM/PM與24小時時間設置,這可能會導致NSDateFormatter重寫您設置的格式字符串。「 – 2016-01-26 02:05:00

+1

@帕特里克,是的,這是真的,如果我把我的設備設置爲12小時,返回的時間是12小時。 – Leon 2016-03-15 09:34:32

+0

這是最好的答案,因爲您不必欺騙該位置。 – 2017-04-29 16:15:11

1

你必須在這裏兩步

NSLocale* locale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_GB"]; 
[formatter setLocale:locale]; 

[formatter setDateFormat:@"hh:mm a"]; 

這裏在格式化給AM/PM格式

0

如果它可以幫助任何人,我剛纔有一個問題,我想顯示的方式向用戶他們有自己的設備上設置時間:

let timeFormatter = NSDateFormatter() 
timeFormatter.timeStyle = NSDateFormatterStyle.ShortStyle 
//get the time from the picker 

的24風格派的時候我們的API:

timeFormatter.locale = NSLocale(localeIdentifier: "en_GB") 
//get the time again