2009-12-13 81 views

回答

3

你最好的選擇絕對是[someNSDateFormatter stringFromDate:someDate]或[someNSDateFormatter dateFromString:someString],但如果你真的想要做你所問的,看看Unicode standard for date format strings,這是什麼iPhone OS使用。

具體地,注意,用於AM/PM符號和h/HH/H/HH/K/KK是所有可能性的小時符號,這取決於它是否從0或1計數,是12或24小時,並填充零或不填。

你的代碼來實現,這可能是沿着線的東西:

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; 
[dateFormatter setDateStyle:NSDateFormatterNoStyle]; 
[dateFormatter setTimeStyle:NSDateFormatterLongStyle]; 

if([[dateFormatter dateFormat] containsString:@"a"]) { 
    // do something 
} else { 
    // do something else 
} 

[dateFormatter release]; 

但是,你必須要小心,因爲文字字符可以包含在單引號,所以你必須考慮到這。你可以嘗試尋找h或k,但要小心,因爲法國人代表14:05是2:05 pm(不知道它是如何顯示在iPhone上的,但這就是他們經常寫它的方式),所以時間格式可能包括類似k'h'mm

1

這不是語言環境設置,而是語言環境設置的集合。它是時間格式的一部分,其中有四個(至少在Mac上),它們並不一定使用相同的AM/PM名稱。在Mac上,甚至可以使用AM/PM段的24小時小時段,輸出像「17:35 PM」這樣的輸出,但仍然可能。

最簡單的方法是讓日期格式化程序從日期對象中爲您設置時間格式,假設這對您正在做的事情有意義。如果不是,有趣的時光正在朝你的方向前進。

在iPhone上,格式字符串的用戶界面只是一個切換開關(24小時開啓或關閉),所以您不必擔心病態情況。選擇AppleICUTimeFormatStrings中的一個格式字符串作爲用戶默認值,然後解析它,查找AM/PM format characters之一。請確保跳過''之間的任何內容,因爲該內容是一個文字字符串,而不是格式字符。

只要小心,如果你曾經把你的應用程序到Mac。如果你這樣做,我不會費心去嘗試理解格式字符串 - 只需在你自己的首選項中設置一個複選框即可。

+0

非常感謝!似乎比它的價值更麻煩(而且不是很健壯)......我只是在我的應用程序首選項下進行切換。 – 2009-12-14 09:57:26

+0

如果你在iPhone應用程序中這樣做,用戶可能不希望看到它和/或可能稱爲冗餘,因爲在所有應用程序的設置(管理時間格式)中已經有這樣的開關。最糟糕的可能性是,審覈人員當天會遇到糟糕的一天,並會拒絕您的應用程序,因爲這種看似「重複的功能」。 – 2009-12-14 16:37:05

相關問題