2011-03-03 71 views
7

我希望能夠根據iPhone配置獲取運行應用程序的本地日期和時間。具體而言,我需要日期格式爲mm/dd或dd/mm(或dd.mm,mm.dd,dd-mm,mm-dd等),具體取決於語言環境,時間爲hh:mm。這可能與一些SDK方法的組合?使用NSDate的本地化日期(月和日)和時間

謝謝!

回答

6

好吧,我相信下面的代碼工作爲我所需要的:

NSString *dateComponents = @"yMMd"; 
NSString *dateFormat = [NSDateFormatter dateFormatFromTemplate:dateComponents options:0 locale:[NSLocale currentLocale]]; 
NSArray *tmpSubstrings = [dateFormat componentsSeparatedByString:@"y"]; 
NSString *tmpStr; 
NSRange r; 
if ([[tmpSubstrings objectAtIndex:0] length] == 0) { 
    r.location = 1; 
    r.length = [[tmpSubstrings objectAtIndex:1] length] - 1; 
    tmpStr = [[tmpSubstrings objectAtIndex:1] substringWithRange:r]; 
} else { 
    r.location = 0; 
    r.length = [[tmpSubstrings objectAtIndex:0] length] - 1; 
    tmpStr = [[tmpSubstrings objectAtIndex:0] substringWithRange:r]; 
} 
NSString *newStr = [[NSString alloc] initWithFormat:@"%@ H:mm", tmpStr]; 
NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; 
[formatter setDateFormat:newStr]; 
NSString *formattedDateString = [formatter stringFromDate:[NSDate date]]; 
13

我已經修改了代碼,以便它只是需要在不改變的日期和時間出的NSDate對象:

NSDate* date = [NSDate date]; 
NSString* datePart = [NSDateFormatter localizedStringFromDate: date 
                dateStyle: NSDateFormatterShortStyle 
                timeStyle: NSDateFormatterNoStyle]; 
NSString* timePart = [NSDateFormatter localizedStringFromDate: date 
                dateStyle: NSDateFormatterNoStyle 
                timeStyle: NSDateFormatterShortStyle]; 
NSLog(@"Month Day: %@", datePart); 
NSLog(@"Hours Min: %@", timePart); 
+0

工作正常。但是,如果本地化日期的年份是第一年,那麼此代碼會中斷,不是嗎? – DNewell 2011-03-04 19:58:31

+0

是的。有沒有一個本地化做這樣的事情?問題是我們沒有可靠的方法來確定哪一個數字是來自字符串的年份。你最好的辦法是不要試圖修改DateFormatter的內容......我修改了我的答案中的代碼來做到這一點。 – 2011-03-05 15:56:32

+0

如果你看看我的代碼,獲取日期格式的行就是祕密。這給了我本地化的格式:y/MM/d或d/MM/y或MM/d/y或其他。一旦我得到y和分隔符被刪除,我可以使用該字符串爲格式化程序的setDateFormat參數,並獲得沒有年份的適當的本地化日期。 – DNewell 2011-03-05 17:35:58