Ios 比较两个日期的月份和日期
我需要设置一个if/else语句,只比较两个日期的月份和日期。其中一个日期是用UIDatePicker选择的,另一个是今天的日期。如果两者的月份和日期相同,则会发生一些事情,如果不是其他事情发生的话 这是我目前设置它的方式,但它不起作用(else语句总是激发)。不确定从这里走到哪里: h m 我以为这会奏效,但事实并非如此。我只需要匹配NSDates的月和日部分,因此我尝试将它们格式化为这些部分并比较字符串。问题是,我总是得到“日期不匹配”这句话,即使日期确实匹配。不知道为什么,我可以用一个解释和正确的方法来解决这个问题。你必须使用Ios 比较两个日期的月份和日期,ios,objective-c,nsdate,Ios,Objective C,Nsdate,我需要设置一个if/else语句,只比较两个日期的月份和日期。其中一个日期是用UIDatePicker选择的,另一个是今天的日期。如果两者的月份和日期相同,则会发生一些事情,如果不是其他事情发生的话 这是我目前设置它的方式,但它不起作用(else语句总是激发)。不确定从这里走到哪里: h m 我以为这会奏效,但事实并非如此。我只需要匹配NSDates的月和日部分,因此我尝试将它们格式化为这些部分并比较字符串。问题是,我总是得到“日期不匹配”这句话,即使日期确实匹配。不知道为什么,我可以用一个解释
if ([todaysDateString isEqualToString:pickedDateString]) {
而不是
if (todaysDateString == pickedDateString) {
因为您必须比较字符串内容,而不是它们的指针
此外,您还可以使用相同的日期格式化程序优化您的实现:
- (IBAction)buttonToCompareDates:(id)sender {
dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"MM/dd"];
// Sets date from date picker
pickedDate = [datePicker date];
pickedDateString = [dateFormatter stringFromDate:pickedDate];
// Sets today's date
todaysDate = [NSDate date];
todaysDateString = [dateFormatter stringFromDate:todaysDate];
// if/else statement
if ([todaysDateString isEqualToString:pickedDateString]) {
label.text = @"The dates match.";
} else {
label.text = @"The dates don't match.";
}
}
你必须使用
if ([todaysDateString isEqualToString:pickedDateString]) {
而不是
if (todaysDateString == pickedDateString) {
因为您必须比较字符串内容,而不是它们的指针
此外,您还可以使用相同的日期格式化程序优化您的实现:
- (IBAction)buttonToCompareDates:(id)sender {
dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"MM/dd"];
// Sets date from date picker
pickedDate = [datePicker date];
pickedDateString = [dateFormatter stringFromDate:pickedDate];
// Sets today's date
todaysDate = [NSDate date];
todaysDateString = [dateFormatter stringFromDate:todaysDate];
// if/else statement
if ([todaysDateString isEqualToString:pickedDateString]) {
label.text = @"The dates match.";
} else {
label.text = @"The dates don't match.";
}
}
比较字符串可能会起作用,但像这样使用NSCalendar可能更有效:
NSDate *date1, *date2;
NSDateComponents* components1 = [[NSCalendar currentCalendar] components:NSMonthCalendarUnit|NSDayCalendarUnit fromDate:date1];
NSDateComponents* components2 = [[NSCalendar currentCalendar] components:NSMonthCalendarUnit|NSDayCalendarUnit fromDate:date2];
if (components1.month == components2.month && components1.day == components2.day) {
// same month and day
} else {
// not same month and day
}
比较字符串可能会起作用,但像这样使用NSCalendar可能更有效:
NSDate *date1, *date2;
NSDateComponents* components1 = [[NSCalendar currentCalendar] components:NSMonthCalendarUnit|NSDayCalendarUnit fromDate:date1];
NSDateComponents* components2 = [[NSCalendar currentCalendar] components:NSMonthCalendarUnit|NSDayCalendarUnit fromDate:date2];
if (components1.month == components2.month && components1.day == components2.day) {
// same month and day
} else {
// not same month and day
}
现在,由于iOS 8+,它就像:
NSDateComponents* components1 = [[NSCalendar currentCalendar] components:NSCalendarUnitMonth|NSCalendarUnitDay fromDate:dateArticle];
NSDateComponents* components2 = [[NSCalendar currentCalendar] components:NSCalendarUnitMonth|NSCalendarUnitDay fromDate:frDateNow];
if (components1.month == components2.month && components1.day == components2.day) {
// same month and day
} else {
// not same month and day
}
现在,由于iOS 8+,它就像:
NSDateComponents* components1 = [[NSCalendar currentCalendar] components:NSCalendarUnitMonth|NSCalendarUnitDay fromDate:dateArticle];
NSDateComponents* components2 = [[NSCalendar currentCalendar] components:NSCalendarUnitMonth|NSCalendarUnitDay fromDate:frDateNow];
if (components1.month == components2.month && components1.day == components2.day) {
// same month and day
} else {
// not same month and day
}
正如我所知,NSString无法与“==”进行比较。您将得到警告“字符串文字的直接比较具有未定义的行为”。尝试等质量字符串method@HuyNghia您完全正确,因为不可能在目标C中重载运算符。正如我所知,NSString无法与“==”进行比较。您将得到警告“字符串文字的直接比较具有未定义的行为”。尝试等质量字符串method@HuyNghia你们是绝对正确的,因为不可能在目标C中重载运算符。嘿,这就解决了它!我从来都不知道这句话的存在,对Objective-C来说还是新鲜事。谢谢你的快速回复。@Dick如果你有很强的C语言背景,学习Objective C会容易得多。嘿,这就解决了它!不知道那条线的存在,对于Objective-C仍然是新手。感谢您的快速回复。@Dick如果您对C语言有很强的背景,学习Objective C会容易得多。对于iOS 8.0+使用
NSCalendarUnitMonth | NSCalendarUnitDay
asNSMonthCalendarUnit
从iOS 8.0开始,iOS 8.0+使用不推荐使用NSCalendarUnitMonth | NSCalendarUnitDay
asNSMonthCalendarUnit
从iOS 8.0开始就不推荐使用