Objective c 目标-C–;NSDateFormatter dateFromString忽略时间

Objective c 目标-C–;NSDateFormatter dateFromString忽略时间,objective-c,cocoa,nsdateformatter,Objective C,Cocoa,Nsdateformatter,如果我对时间不感兴趣,我可以忽略它吗?也就是说,我有一个日期字符串,看起来像这样“2012-12-19T14:00:00”,但我只对获取日期(2012-12-19)感兴趣,但是如果我像[dateFormatter setDateFormat:@“yyyy-MM-dd”那样设置NSDateFormatter它将返回一个nilNSDate所有日期字符串返回10个字符作为日期,我的意思是今天的日期将是2012-11-19 您可以轻松地为日期添加子字符串,并根据需要使用它: 例如: NSStri

如果我对时间不感兴趣,我可以忽略它吗?也就是说,我有一个日期字符串,看起来像这样“2012-12-19T14:00:00”,但我只对获取日期(2012-12-19)感兴趣,但是如果我像
[dateFormatter setDateFormat:@“yyyy-MM-dd”那样设置
NSDateFormatter
它将返回一个nil
NSDate

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

您可以轻松地为日期添加子字符串,并根据需要使用它:

例如:

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

输出将是:
2012-11-19

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

您可以轻松地为日期添加子字符串,并根据需要使用它:

例如:

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

输出将是:
2012-11-19

一个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

虽然格式(由样式选择)将取决于您的环境语言环境,但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

虽然格式(由样式选择)将取决于您的环境区域设置

我看到路上发生车祸…我看到路上发生车祸…我最后做了:
NSString*event=[event substringToIndex:10]//删除时间
[dateFormatter setDateFormat:@“yyyy-MM-dd”]
NSDate*eventDate=[DateFormatterDateFromString:event]这是一个可行的解决方案吗?我认为这是可能的最丑陋的解决方案。您应该将日期和时间视为NSDATE。此外,这也不会为本地化和时区处理提供任何灵活性。您真的需要将时间组件设置为
00:00
?你就不能把时间样式设为
NoStyle
,就这样处理掉吗?@DaveDeLong-可能,这取决于它的用途。这对我很有帮助。谢谢最后我做了:
NSString*event=[event substringToIndex:10]//删除时间
[dateFormatter setDateFormat:@“yyyy-MM-dd”]
NSDate*eventDate=[DateFormatterDateFromString:event]这是一个可行的解决方案吗?我认为这是可能的最丑陋的解决方案。您应该将日期和时间视为NSDATE。此外,这也不会为本地化和时区处理提供任何灵活性。您真的需要将时间组件设置为
00:00
?你就不能把时间样式设为
NoStyle
,就这样处理掉吗?@DaveDeLong-可能,这取决于它的用途。这对我很有帮助。谢谢