Objective-C - NSDateFormatter dateFromString忽略时间

时间:2012-11-19 11:59:45

标签: objective-c cocoa nsdateformatter

如果我对时间不感兴趣,我可以忽略它吗?即我有一个类似于@"2012-12-19T14:00:00"的日期字符串,但我只对获取日期感兴趣(2012-12-19),但如果我将NSDateFormatter设置为[dateFormatter setDateFormat:@"yyyy-MM-dd"];,它将返回我没有NSDate

2 个答案:

答案 0 :(得分:3)

NSDate对象也总是包含一个时间组件,因为它代表一个时间点 - 从这个角度来看,人们可能认为NSDate的名称具有误导性。

您应该创建一个日期格式化程序,用于从字符串创建日期,将时间设置为一天的开始,并使用第二个日期格式化程序输出没有时间组件的日期。

NSString *dateString = @"2012-12-19T14:00:00";

NSDateFormatter *inputFormatter = [[NSDateFormatter alloc] init];
[inputFormatter setDateFormat:@"yyyy-MM-dd'T'HH:mm:ss"];

NSDateFormatter *outputFormatter = [[NSDateFormatter alloc] init];
[outputFormatter setDateStyle:NSDateFormatterShortStyle];
[outputFormatter setTimeStyle:NSDateFormatterNoStyle];

NSDate *date = [inputFormatter dateFromString:dateString];

//this will set date's time components to 00:00
[[NSCalendar currentCalendar] rangeOfUnit:NSDayCalendarUnit
                                startDate:&date
                                 interval:NULL
                                  forDate:date];

NSString *outputString = [outputFormatter stringFromDate:date];

NSLog(@"%@", outputString);

结果

19.12.12

而格式 - 由样式选择 - 将取决于您的环境区域设置

答案 1 :(得分:-1)

所有日期字符串返回10个字符的日期,我的意思是今天的日期将是2012-11-19

您可以轻松地对日期进行子字符串并根据需要使用它:

示例:

    NSString* newDate = @"";
    newDate = [[NSDate date]substringToIndex:10];

输出将是:2012-11-19