如何比较两次NSDate。做比较时为nsdate返回零。 #debug我的代码 [英] How to compare two time from NSDate. Returning nil for nsdate when doing comparision. #debug my code

查看:151
本文介绍了如何比较两次NSDate。做比较时为nsdate返回零。 #debug我的代码的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

这是代码:

// get current date/time
    NSDate *today = [NSDate date];
    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
    // display in 12HR/24HR (i.e. 11:25PM or 23:25) format according to User Settings
    [dateFormatter setTimeStyle:NSDateFormatterMediumStyle];
    [dateFormatter setDateFormat:@"HH:mm:ss"];
    NSString *currentTime = [dateFormatter stringFromDate:today];
    currentTime = [currentTime stringByReplacingOccurrencesOfString:@"AM" withString:@""];
    currentTime = [currentTime stringByReplacingOccurrencesOfString:@"PM" withString:@""];
    currentTime = [currentTime stringByReplacingOccurrencesOfString:@" " withString:@""];

    NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
    [formatter setTimeStyle:NSDateFormatterMediumStyle];
    [formatter setDateFormat:@"HH:mm:ss"];

    NSDate *date1= [formatter dateFromString:currentTime];
    NSDate *date2 = [formatter dateFromString:@"5:00:00"];


    NSComparisonResult result = [date1 compare:date2];
    if(result == NSOrderedDescending)
    {
        NSLog(@"date1 is later than date2"); 
    }

这里当我运行代码时,我得到date1和date2为nil,而我正确地获取当前24小时格式的时间。从[NSDate date]获取当前时间时,我已经应用了相同的日期格式。我在这里缺少什么?

Here when I run the code I am getting date1 and date2 as nil, while I am properly getting the current time in 24 hour format. I had applied same date formatting while getting current time from [NSDate date] . What am I missing here?

编辑1:修正了打字错误并更改了标题。

EDIT 1: Fixed the typo and changed the title.

编辑2:根据建议,要比较只有一小时我可以使用:

EDIT 2: As per suggestion, To compare Only the hour I can use:

NSCalendar *calendar = [NSCalendar currentCalendar];
    NSDateComponents *components = [calendar components:(NSHourCalendarUnit) fromDate:date1];

    NSInteger hour = [components hour];

编辑3:更改标题,以符合确切要求。

EDIT 3: Changed the title, to match the exact requirements.

但我无法从当前时间检索date1。它会抛出一个垃圾值。

But I am not able to retrieve date1 from current time. It throws a garbage value .

推荐答案

有一个打字错误:

dateFormatter setDateFormat:@HH:mm:ss];

应该是:

[formatter setDateFormat:@HH :mm:ss];

要比较两个日期,请使用:

To compare two dates use:

NSDate *date1 = [NSDate date];

NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:@"HH:mm:ss"];
NSDate *date2 = [formatter dateFromString:@"05:00:00"];

NSComparisonResult result = [date1 compare:date2];
if(result == NSOrderedDescending)
{
    NSLog(@"date1 is later than date2");
}

如果您只想比较小时数:

If you only want to compare the hours:

NSCalendar *calendar = [NSCalendar currentCalendar];

NSDate *date1 = [NSDate date];
NSDateComponents *date1Components = [calendar components:NSCalendarUnitHour fromDate:date1];
NSInteger date1Hour = date1Components.hour;

NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:@"HH:mm:ss"];
NSDate *date2 = [formatter dateFromString:@"05:00:00"];
NSDateComponents *date2Components = [calendar components:NSCalendarUnitHour fromDate:date2];
NSInteger date2Hour = date2Components.hour;

if(date1Hour > date2Hour) {
    NSLog(@"date1 is later than date2");
}

这篇关于如何比较两次NSDate。做比较时为nsdate返回零。 #debug我的代码的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆