如何将来自服务器的日期与ios中的[NSDate date]进行比较?
我正在从服务器获取2014年2月1日16:43:00 AM格式的日期字符串,该格式具有GMT时区 我必须将该日期与流媒体直播的当前日期进行比较。如果当前日期小于服务器日期,我必须显示一些警报,显示正确的实时启动时间。但我无法比较它们 如何将服务器日期字符串转换为日期格式,以及如何将该日期与当前日期进行比较 我正在使用以下代码:如何将来自服务器的日期与ios中的[NSDate date]进行比较?,ios,iphone,nsdateformatter,Ios,Iphone,Nsdateformatter,我正在从服务器获取2014年2月1日16:43:00 AM格式的日期字符串,该格式具有GMT时区 我必须将该日期与流媒体直播的当前日期进行比较。如果当前日期小于服务器日期,我必须显示一些警报,显示正确的实时启动时间。但我无法比较它们 如何将服务器日期字符串转换为日期格式,以及如何将该日期与当前日期进行比较 我正在使用以下代码: NSString *DateFromServer = video.Eventutcstart; NSDateFormatter * dateFormatter1 = [[
NSString *DateFromServer = video.Eventutcstart;
NSDateFormatter * dateFormatter1 = [[NSDateFormatter alloc] init];
NSTimeZone *timeZone = [NSTimeZone localTimeZone];
NSString *tzName = [timeZone name];
[dateFormatter1 setTimeZone:[NSTimeZone timeZoneWithName:tzName]];
[dateFormatter1 setDateFormat:@"MM/dd/yyyy HH:mm:ss a"];
NSString *str = [dateFormatter1 stringFromDate:[NSDate date]];
NSDate *currentDate = [dateFormatter1 dateFromString:str];
NSDate *serverDate = [dateFormatter1 dateFromString: DateFromServer];
NSLog(@"currentDate %@", currentDate);
NSLog(@"serverDate %@", serverDate);
NSComparisonResult result;
result = [currentDate compare:serverDate];
if(result == NSOrderedDescending)
{
NSLog(@"alert message");
}
输出:
2014-01-03 11:30:25.346 VMS[955:70b] currentDate 2014-01-02 19:00:23 +0000
2014-01-03 11:30:32.088 VMS[955:70b] serverDate 2014-01-02 19:00:46 +0000
请帮我解决这个问题……请使用下面的代码。您没有正确设置时区:
NSString *DateFromServer = video.Eventutcstart;
NSDateFormatter * dateFormatter1 = [[NSDateFormatter alloc] init];
[dateFormatter1 setTimeZone:[NSTimeZone localTimeZone]];
[dateFormatter1 setDateFormat:@"MM/dd/yyyy HH:mm:ss a"];
NSString *str = [dateFormatter1 stringFromDate:[NSDate date]];
NSDate *currentDate = [dateFormatter1 dateFromString:str];
NSDate *serverDate = [dateFormatter1 dateFromString: DateFromServer];
NSLog(@"currentDate %@", currentDate);
NSLog(@"serverDate %@", serverDate);
NSComparisonResult result;
result = [currentDate compare:serverDate];
if(result == NSOrderedDescending)
{
NSLog(@"alert message");
}
仅用于日期比较, 您有两个正确获取的日期,因此可以使用:
int days1 = [currentDate timeIntervalSince1970] / 86400;
int days2 = [serverDate timeIntervalSince1970] / 86400;
if(days1==days2)
{
//do something;
}
else
{
//do something
}
上述代码不考虑时间,只比较年/月/日
用于NSdate时间比较
unsigned int flags = NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit;
NSCalendar* calendar = [NSCalendar currentCalendar];
NSDateComponents* component1 = [calendar components:flags fromDate:currentDate];
NSDateComponents* component2 = [calendar components:flags fromDate:serverDate];
NSDate* currentDateTimeOnly = [calendar dateFromComponents:component1];
NSDate* serverDateTimeOnly = [calendar dateFromComponents:component2];
NSComparisonResult result;
result = [currentDateTimeOnly compare:serverDateTimeOnly];
if(result == NSOrderedDescending)
{
NSLog(@"alert message");
}
试试这个代码
if(result == NSOrderedAscending)
{
NSLog(@"alert message");
}
而不是这个
if(result == NSOrderedDescending)
{
NSLog(@"alert message");
}
如果您想用两个日期检查两个约束,那么可以使用下面的代码
if(result == NSOrderedAscending){
NSLog(@"serverDate is in the future");
}else if(result == NSOrderedDescending){
NSLog(@"serverDate is in the past");
}else{
NSLog(@"Both dates are the same");
}
使用上述代码可能对您有用NSLog(@“currentDate%@”,currentDate)的输出是什么;NSLog(@“serverDate%@”,serverDate)代码>?是,请提供日志输出,以便有人可以帮助您检查这一点,这可能对您有所帮助。请在调试控制台中比较日期值。在调试控制台的左侧,您将看到1个日期(GMT日期),日志将根据系统时区给出1个日期。。所以请仔细检查。我曾经遇到过类似的问题,当我看到这两个值不同时,我意识到我测试代码,但我这边没有问题。我在控制台上得到“警报消息”打印。在这种情况下,如果当前日期小于服务器日期,它也不会进入条件,但在“如果”条件下,您只能检查一个约束,即当前日期是否大于服务器日期。
NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
[dateFormat setDateFormat:@"yyyy-MM-dd"];
NSUserDefaults *def=[NSUserDefaults standardUserDefaults];
NSString *a1=[def objectForKey:@"Currentdate"];
NSDate *now = [dateFormat dateFromString:a1];
NSDate * currentdate = [NSDate date];
NSString *nowstr=[dateFormat stringFromDate:currentdate];
NSDate *todaydate=[dateFormat dateFromString:nowstr];
NSLog(@"Now is %@ and current date is %@",[def objectForKey:@"Currentdate"],nowstr);
NSComparisonResult result = [todaydate compare:now];
switch (result)
{
case NSOrderedAscending:
dateiswhich=-1;
NSLog(@"%@ is in future from %@", currentdate, now);
break;
case NSOrderedDescending:
dateiswhich=1;
NSLog(@"%@ is in past from %@", currentdate, now);
break;
case NSOrderedSame: dateiswhich=-1;
break;
default: NSLog(@"erorr dates %@, %@", currentdate, now); break;
}