2011-06-06 54 views
3

我想獲得像「10:00 PM」的時間字符串,並使用NSDateFormatterShortStyle來實現此目的。 但是,當系統設置爲使用24小時制時,我得到的是「22:00」。如何獲得12小時格式時間字符串,當系統設置爲使用24小時格式

此外,我想要一個本地化的時間字符串。例如,在中文裏,我想得到「下午10:00」而不是「晚上10:00」。所以我必須使用[NSLocale currentLocale],並且不能使用en_US_POSIX語言環境。

請幫我弄一個本地化的12小時格式的時間字符串。

我不僅需要小時零件,還需要am/pm零件。此外,am/pm部分可以根據語言環境定位在小時/分鐘部分之前或小時/分鐘部分之後。就像系統顯示時間一樣。 當系統設置爲使用12小時格式時,它很簡單。但是當系統使用24小時格式時,我無法獲得本地化的12小時格式時間字符串。

+1

你爲什麼要這樣對您的應用程序的用戶? – koo 2011-06-08 03:12:29

回答

13

嗯,這應該工作:

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc]init]; 
[dateFormatter setDateFormat:[NSDateFormatter dateFormatFromTemplate:@"hh:mm a" options:0 locale:[NSLocale currentLocale]]]; 
NSString *theTime = [dateFormatter stringFromDate:[NSDate date]]; 

這應該讓你的日期格式,將給予12小時格式的日期。小寫hh表示小時1-12格式。有關格式字符串的詳細信息,請參閱Date Format Patterns的Unicode技術標準#35部分。

不幸的是,iOS會根據用戶的24小時格式首選項設置重寫格式字符串。使用Cocoa的日期格式,我無法找到該設置。由於24小時格式將放棄am/pm標記,因此解析生成的字符串以將小時數大於12的小數點轉換會導致模糊的時間字符串。因此,我可以看到的唯一剩餘選項是尊重用戶24小時偏好設置或使用其他本地化代碼。你可以自己寫,或者找一個開源的替代品。

+0

我試過了,但它不起作用。 dateFormatFromTemplate:option:locale:返回時間格式字符串,不是NSDateFormatter對象。 – Swordsfrog 2011-06-08 00:54:57

+1

我原來的回答是錯的,所以我大量編輯了答案。 – 2011-06-08 16:38:35

+0

它爲我工作,感謝..它給了我「下午11:00」格式..我想要11pm ...所以我試着用hha,但它仍然給出了下午11點..如何讓它像「晚上11點」? – 2012-08-15 10:58:09

-2
NSInteger originalHour = hour; 
BOOL isPm = YES; 
if (hour >= 12) { 
    if (hour > 12) 
     hour -= 12; 
} 
else { 
    isPm = NO; 
} 

if (hour == 0) 
    hour = 12; 
+0

主題不相關。 – Joe 2015-10-17 07:41:31

0

雨燕3.0

var dateFormatter = DateFormatter() 
    dateFormatter.dateFormat = DateFormatter.dateFormat(fromTemplate: "hh:mm a", options: 0, locale: NSLocale.current) 
    var theTime: String = dateFormatter.string(from: Date()) 
相關問題