有沒有什麼方法可以檢測到應用的當前設備是否使用12小時我們的24h格式,這樣我可以使用一個NSDateFormatter 12小時和一個24小時,具體取決於用戶的語言/放置設置?就像UIDatePicker檢測並顯示AM/PM選取器是否爲12h格式一樣。檢測時間格式是否爲12小時或24小時格式
回答
我覺得它很容易。我只是說此代碼viewDidLoad
:
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setLocale:[NSLocale currentLocale]];
[formatter setDateStyle:NSDateFormatterNoStyle];
[formatter setTimeStyle:NSDateFormatterShortStyle];
NSString *dateString = [formatter stringFromDate:[NSDate date]];
NSRange amRange = [dateString rangeOfString:[formatter AMSymbol]];
NSRange pmRange = [dateString rangeOfString:[formatter PMSymbol]];
BOOL is24h = (amRange.location == NSNotFound && pmRange.location == NSNotFound);
[formatter release];
NSLog(@"%@\n",(is24h ? @"YES" : @"NO"));
而且它完美地返回YES
或NO
取決於語言環境。
謝謝你的回答。它幫助我很多。 – Gypsa
這隻適用於本地日曆使用與手機相同的格式,但在iOS上,您可以專門設置時間格式,使其與本地日曆中使用的格式不同。 – yoeriboven
這裏是斯威夫特版本:
func using12hClockFormat() -> Bool {
let formatter = NSDateFormatter()
formatter.locale = NSLocale.currentLocale()
formatter.dateStyle = NSDateFormatterStyle.NoStyle
formatter.timeStyle = NSDateFormatterStyle.ShortStyle
let dateString = formatter.stringFromDate(NSDate())
let amRange = dateString.rangeOfString(formatter.AMSymbol)
let pmRange = dateString.rangeOfString(formatter.PMSymbol)
return !(pmRange == nil && amRange == nil)
}
您正在使用三元運算符作爲NOT,這使得它更難以閱讀。返回的行應該是這個'return!(pmRange == nil && amRange == nil)' – EmilioPelaez
啊,當然,謝謝:)我已經編輯了它.. – Wiingaard
這裏是一個雨燕3.0更新版本
func using12hClockFormat() -> Bool {
let formatter = DateFormatter()
formatter.locale = Locale.current
formatter.dateStyle = .none
formatter.timeStyle = .short
let dateString = formatter.string(from: Date())
let amRange = dateString.range(of: formatter.amSymbol)
let pmRange = dateString.range(of: formatter.pmSymbol)
return !(pmRange == nil && amRange == nil)
}
這是爲我工作迅速解決,以上這兩個沒有。
let dateString : String = DateFormatter.dateFormat(fromTemplate: "j", options: 0, locale: Locale.current)!
if(dateString.contains("a")){
// 12 h format
return true
}else{
// 24 h format
return false
}
最正確的答案我猜 –
目標C類NSDate+Extensions
:
@import Foundation;
@interface NSDate (Extensions)
- (NSString *)getTimeString;
@end
#import "NSDate+Extensions.h"
@implementation NSDate (Extensions)
- (NSString *)getTimeString
{
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
if ([self isTwelveHourDateFormat]) {
[formatter setDateFormat:@"hh:mm\ndd MMM"];
}
else {
[formatter setDateFormat:@"HH:mm\ndd MMM"];
}
return [formatter stringFromDate:self];
}
- (BOOL)isTwelveHourDateFormat
{
NSString *dateFormat = [NSDateFormatter dateFormatFromTemplate:@"j" options:0 locale:[NSLocale currentLocale]];
return [dateFormat containsString:@"a"];
}
@end
- 1. 檢測iPhone是否在12小時或24小時模式下顯示時間?
- 2. 使用javascript轉換24小時格式爲12小時格式
- 3. 24小時格式爲12小時格式
- 4. 將12小時時間格式轉換爲24小時整數?
- 5. 正則表達式12小時和24小時時間格式
- 6. 12小時或24小時格式的NSDateComponent中的小時?
- 7. 24小時時間格式
- 8. 如何將24小時格式TimeSpan轉換爲12小時格式TimeSpan?表示爲24小時格式
- 9. 轉換12小時格式到24小時格式在SQL Server
- 10. 如何檢測當前語言環境是否使用12小時或24小時時間格式?
- 11. 從24小時更改JS時間格式12小時
- 12. jqm-calendar時間格式(默認24小時...寧願12小時)
- 13. Flex中的時間格式「24小時制」和「12小時制」
- 14. 轉換日期,時間在12小時格式24小時格式的iOS
- 15. 從12小時格式到24小時格式的時間轉換
- 16. php 12小時格式到24小時格式化時間轉換
- 17. 轉換24小時格式小時爲12個小時制時間在PHP
- 18. 爲12小時時間格式
- 19. SQL24小時格式時間至12小時格式
- 20. hh:mm aa(12小時格式)轉換爲HH:mm(24小時制)
- 21. 新日期()12/24小時格式JavaScript?
- 22. 如何在Postgres中將12小時時間戳格式轉換爲24小時時間戳格式?
- 23. 轉換爲時間12小時格式從包含24小時格式時間的字符串
- 24. 將12小時日期格式轉換爲24小時格式,反之亦然?
- 25. 如何將12小時格式轉換爲水壺中的24小時格式
- 26. 轉換24小時日期格式爲12小時格式在R
- 27. Android日期時間格式錯誤時間顯示12小時和24小時
- 28. 將12小時時間格式轉換爲24小時,如mysql中所示
- 29. 在Ruby中將12小時時間轉換爲24小時格式
- 30. 我是否要檢查手機時間格式是否設置爲24小時?
已經回答[這裏](http://stackoverflow.com/q/1929958/154803) – progrmr
@progrmr那絕對是一個確定是否設置24小時制的好方案,但取決於日期格式化程序的行爲。 OP希望這些信息使用日期格式化程序格式化字符串,以便解決方案包括添加類別類別,創建日期格式化程序,將日期轉換爲字符串,爲AM/PM符號搜索字符串兩次,然後將代碼分支到格式使用12小時或24小時格式,當它已經爲你做。 – Joe
@Joe我知道,但有時你需要知道其他原因,比如把「AM」放在一個單獨的不同字體的UILabel中,OP不清楚他爲什麼想知道。 – progrmr