2011-03-03 49 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