2012-10-13 235 views
1

我有一個應用程序讓用戶在選擇語言後選擇他們的語言,並根據國家/地區的日期格式更改日期和時間。如何在ios中以24小時格式顯示上午/下午

我這樣做是由NSDateFormatter.- [dateFormatter setDateFormat:.....]; for english-US - 我使用「h:mm a」 - 顯示am/pm設置。

問題是:am pm只顯示如果我的iPhone是在12小時模式, 我想這是因爲它會自動檢查iPhone的時間格式, 有沒有辦法覆蓋這個? am/pm將以24模式顯示。

回答

7

這個工作對我來說:

dateFormatter.dateFormat = @"H:mm a"; 

例子:

// Set up formatter 
NSDateFormatter *dateFormatter; 
dateFormatter = [[NSDateFormatter alloc] init]; 
dateFormatter.dateFormat = @"H:mm a"; 

// Print test date 
NSDate *date = [NSDate dateWithTimeIntervalSinceNow:8900]; 
NSLog(@"%@", [dateFormatter stringFromDate:date]); 

輸出:

14:23 PM 
+0

,並根據您的 「語言選擇」 功能:你爲什麼不你使用內置本地化功能的蘋果?參見[國際化準則](https://developer.apple.com/library/ios/#documentation/MacOSX/Conceptual/BPInternational/Articles/InternationalGuidelines.html#//apple_ref/doc/uid/20002142-BBCFJBFB) – Mennny

0
NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; 
[formatter setLocale:[NSLocale currentLocale]]; 
[formatter setDateStyle:NSDateFormatterNoStyle]; 
[formatter setTimeStyle:NSDateFormatterShortStyle]; 
[formatter setDateFormat:@"hh:mm:ss a"]; 
NSString *date = [formatter stringFromDate:[NSDate date]]; 
NSArray *foo1 = [date componentsSeparatedByString:@" "]; 


NSRange amRange = [date rangeOfString:[formatter AMSymbol]]; 
NSRange pmRange = [date rangeOfString:[formatter PMSymbol]]; 
BOOL is24h = (amRange.location == NSNotFound && pmRange.location == NSNotFound); 

NSArray *foo2 = [[foo1 objectAtIndex:0] componentsSeparatedByString:@":"]; 
int hour = [[foo2 objectAtIndex:0] intValue]; 
int minute = [[foo2 objectAtIndex:1] intValue]; 
int second = [[foo2 objectAtIndex:2] intValue]; 

BOOL isAM = NO; 

if (is24h) { 
    if (hour >= 12) { 
     isAM = NO; 
    } else { 
     isAM = YES; 
    } 
} else { 
    isAM = [[foo1 objectAtIndex:1] isEqualToString:@"AM"]; 
} 
相關問題