ios - 不考虑时间比较 NSDates

标签 ios objective-c nsdate nsdatecomponents

<分区>

本质上,我有一个每日提示功能,具有与日期相关的特定提示,我需要一种方法来比较当前的 NSDate 与提示的保存日期,而不考虑时间。显然,1 月 1 日的小费与上午 10 点和 10:30 相关,因此我无法从字面上比较 NSDates。以下是我尝试过的一些方法:

尝试 1 - 不起作用

NSDateComponents *components = [[NSCalendar currentCalendar] components:NSDayCalendarUnit | NSMonthCalendarUnit | NSYearCalendarUnit fromDate:[NSDate date]];
NSInteger day = [components day];
NSInteger month = [components month];
NSInteger year = [components year];

NSDateFormatter *df = [[NSDateFormatter alloc] init];
//    [df setDateFormat:@"yyyy-MM-dd hh:mm:ss a"];
[df setDateFormat:@"yyyy-MM-dd'T'HH:mm:ss"];

尝试 2 - 不起作用

NSString * zoneString = [[NSString stringWithFormat:@"%i-%i-%iT00:00:00", year, month, day] substringFromIndex:([[NSString stringWithFormat:@"%i-%i-%iT00:00:00", year, month, day] length] - 5)];
NSTimeInterval timeInterval = [[zoneString substringToIndex:3] intValue] * 3600;
timeInterval += [[zoneString substringFromIndex:3] intValue] * 60;

NSDateFormatter * formatter = [[NSDateFormatter alloc] init];
[formatter setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:timeInterval]];
[formatter setDateFormat:@"yyyy'-'MM'-'dd' 'HH':'mm':'ss ZZZ"];
NSLog(@"%@", [formatter stringFromDate:myDate]);

尝试 3 - 不起作用

NSDate *date = [NSDate date];
[[NSCalendar currentCalendar] rangeOfUnit:NSDayCalendarUnit startDate:&date interval:NULL forDate:date];

NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
[dateFormat setDateFormat:@"yyyy-MM-dd"];

if ([[dateFormat stringFromDate:date] isEqualToString:[dateFormat stringFromDate:tipDate]])

最佳答案

根据经验,当您比较或操作 NSDate 时s,适合这项工作的工具通常是 NSCalendar 的组合和 NSDateComponents .

使用 NSDateFormatter仅当您需要格式化和显示 NSDate 时.

考虑到这一点,NSDateComponents是要走的路,因为您想比较两个日期的组件子集。

创建两个NSDateComponents实例并进行比较。

例子:

- (BOOL)isToday:(NSDate *)date {
    NSDateComponents *todayComponents = [[NSCalendar currentCalendar] components:NSDayCalendarUnit | NSMonthCalendarUnit | NSYearCalendarUnit
                                                                        fromDate:[NSDate date]];
    NSDateComponents *dateComponents = [[NSCalendar currentCalendar] components:NSDayCalendarUnit | NSMonthCalendarUnit | NSYearCalendarUnit
                                                                       fromDate:date];
    return [dateComponents isEqual:todayComponents];
}

关于ios - 不考虑时间比较 NSDates,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19744384/

相关文章:

iphone - 如何从 as 和 id 传入的整数获取 NSDate?

ios - 是否可以使用麦克风在模拟器上录制实际声音

ios - XCode 编译器 Apple LLVM 3.1 与 LLVM GCC 4.2

ios - 如何在 Swift 4 中将比特币从一个钱包发送到另一个钱包

ios - UITableViewCell背景色渐变

iphone - 将数据保存到另一个数组,内存管理,Objective C

ios - 如何获得两个日期之间的天数 objective-c

ios - 在 Parse 上删除用户推送通知 iOS

在 iOS 9 中设置 UIWindow rootViewController 后 iOS 应用程序崩溃

ios - 将未知格式(任何格式)的字符串转换为日期