2013-06-29 52 views
1

所以我有一個應用程序,其中一些數據是從Web服務返回的,並且相應地調整了UIDatePicker。的日期返回使用以下格式:在12小時內設置24小時制UIDatePicker

12-05-2013 16:05 (dd-mm-yyyy hh:mm) 

的時間被存儲在24個小時的格式,然而的UIDatePicker是爲12小時,這取決於設備上的設置24小時。數據以JSON數組形式出現,並且是關鍵的potdd。我設置的日期選取器稱爲potddatepicker。

NSDateFormatter *inputFormat = [[NSDateFormatter alloc] init]; 
[inputFormat setDateFormat:@"dd-MM-yyy hh:mm"]; 
NSDate *inputDate = [inputFormat dateFromString: [jsonObjects objectForKey:@"potdd"]]; 

NSDate *potdd = inputDate; 
[_potddatepicker setDate:potdd]; 

如果日期設置在12:00之前,那麼它工作正常。但是,如果日期是店24小時時間後的12,然後將其與以下異常崩潰:

Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Invalid parameter not satisfying: date' 

我特別不希望強制的時間爲12小時格式只是爲日期選擇器,然後迫使其回進入24小時後,因爲在某些當地人可能會用到24小時日期選擇器。任何人都知道我可以如何處理這個問題?我無法更改時間存儲在數據庫中的格式。

謝謝!

+0

您是否檢查過'inputDate'以查看它是否具有您期望的值? –

+0

@GradyPlayer問題與該重複的答案是,這是錯誤的。請參閱下面的答案。這就是爲什麼我在這個問題的答案中指出需要使用特殊的'en_US_POSIX'語言環境。 – rmaddy

+0

@rmaddy op的格式化程序稍微有點缺陷,但h和h的主要點是相同的。 –

回答

7

您的錯誤與日期選擇器無關。

您正在使用錯誤的日期格式來解析字符串。您需要:

[inputFormat setDateFormat:@"dd-MM-yyyy HH:mm"]; // HH is 24-hour, hh is 12-hour 

此外,由於您使用的是固定格式的工作,你應該日期格式的區域設置爲en_US_POSIX

3

我懷疑你只是想在你的輸入格式中使用HH而不是hhHH是24小時,hh是12小時。我懷疑你也想要MM而不是第一個mm。 (MM是兩位數月份符; mm是兩位數分鐘符你不想設置分鐘兩次!)

所以值12-05-2013 16:05是爲dd-mm-yyyy hh:mm格式無效的 - 但它是有效的爲dd-MM-yyyy HH:mm

有關更多詳細信息,請參閱Unicode Date Format Patterns文檔 - 基本上,您需要注意您的模式與您的輸入數據相匹配。我會希望該選擇器的UI設置是獨立於您的JSON數據輸入格式,但我沒有足夠的iOS開發足以說肯定。

+1

日期選擇器將返回一個NSDate,它基本上是一個Obj-C封裝器,它自引用日期起爲'double'秒,並且與格式化表示無關,所以是的,它們是完全獨立的。 –

+0

@GradyPlayer:這就是我所希望的:) –

相關問題