如何将来自服务器的日期与ios中的[NSDate date]进行比较?

如何将来自服务器的日期与ios中的[NSDate date]进行比较?,ios,iphone,nsdateformatter,Ios,Iphone,Nsdateformatter,我正在从服务器获取2014年2月1日16:43:00 AM格式的日期字符串,该格式具有GMT时区 我必须将该日期与流媒体直播的当前日期进行比较。如果当前日期小于服务器日期,我必须显示一些警报,显示正确的实时启动时间。但我无法比较它们 如何将服务器日期字符串转换为日期格式,以及如何将该日期与当前日期进行比较 我正在使用以下代码: NSString *DateFromServer = video.Eventutcstart; NSDateFormatter * dateFormatter1 = [[

我正在从服务器获取2014年2月1日16:43:00 AM格式的日期字符串,该格式具有GMT时区

我必须将该日期与流媒体直播的当前日期进行比较。如果当前日期小于服务器日期,我必须显示一些警报,显示正确的实时启动时间。但我无法比较它们

如何将服务器日期字符串转换为日期格式,以及如何将该日期与当前日期进行比较

我正在使用以下代码:

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;
}