2015-10-19 60 views
-6

我必须将日期(来自服务器)与今天的日期进行比较。服务器的日期格式不同(即日期格式可能为2015-09-08或2015-09-08T11:30:00 + 0530)iOS中的日期转换

我们如何才能比较这些不同的日期格式与今天的日期iOS(Objective-C)。

+3

更新你的问题与到目前为止你已经尝试了什么。解释你有什么问题。 – rmaddy

+0

如果你想在Objective C中找到答案,你为什么用swift标签标记你的问题? –

回答

1

尝试用这种

-(void)dateFormateTest{ 
NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; 
formatter.dateFormat = @"yyyy-MM-dd HH:mm:ss Z"; 
[formatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"]; 
[formatter setTimeZone:[NSTimeZone defaultTimeZone]]; 
[NSTimeZone resetSystemTimeZone]; 
NSDate *date = [formatter dateFromString:@"2015-10-06 12:39:12"]; 
NSLog(@"date: %@",date); 

NSComparisonResult result = [date compare:[NSDate date]]; 
if (result == NSOrderedDescending) { 
    NSLog(@"Past"); 
}else if (result == NSOrderedDescending) { 
    NSLog(@"future"); 
} 


} 
+1

为什么在日期格式化程序上设置两种不同的日期格式? – rmaddy

2

其实,有没有问题,如果要比较不同格式的两个日期,问题是比较你必须确保
1.它们转换为日期值同一时区。
2.使用 - (NSComparisonResult)比较:(NSDate的*)anotherDate方法

另外,如果你想你的日期字符串响应从HE转换成NSDate的,你可以做如下

+ (NSDate *)dateFromDateString:(NSString *)dateString withFormat:(NSString *)format { 
    NSDateFormatter *formatter = [NSDateFormatter new]; 
    formatter.dateFormat = format; 
    return [formatter dateFromString:dateString]; 
} 

此外,在特定的组件(如年,月,日,小时无,分或秒)比较两个日期的期限,你必须使用NSDateComponents

- (BOOL)date:(NSDate *)aDate isEqualToDateIgnoringTime:(NSDate *) anotherDate 
    { 
     NSCalendarUnit unitFlags = (NSCalendarUnitYear|NSCalendarUnitMonth|NSCalendarUnitDay|NSCalendarUnitHour|NSCalendarUnitMinute|NSCalendarUnitSecond); 
     NSDateComponents *components1 = [[NSCalendar currentCalendar] components:unitFlags fromDate:aDate]; 
     NSDateComponents *components2 = [[NSCalendar currentCalendar] components:unitFlags fromDate:anotherDate]; 
     return ((components1.year == components2.year) && (components1.month == components2.month) && (components1.day == components2.day)); 
}