Objective-C에서 두 날짜를 비교하는 방법
두 개의 날짜가 2009-05-11
있습니다. 현재 날짜입니다. 주어진 날짜가 현재 날짜인지 확인하고 싶습니다. 이것이 어떻게 가능한지.
NSDate에서
– isEqualToDate:
– earlierDate:
– laterDate:
– compare:
를 사용하면 다음 - (NSComparisonResult)compare:(NSDate *)anotherDate
중 하나가 반환됩니다.
The receiver and anotherDate are exactly equal to each other, NSOrderedSame
The receiver is later in time than anotherDate, NSOrderedDescending
The receiver is earlier in time than anotherDate, NSOrderedAscending.
예:
NSDate * now = [NSDate date];
NSDate * mile = [[NSDate alloc] initWithString:@"2001-03-24 10:45:32 +0600"];
NSComparisonResult result = [now compare:mile];
NSLog(@"%@", now);
NSLog(@"%@", mile);
switch (result)
{
case NSOrderedAscending: NSLog(@"%@ is in future from %@", mile, now); break;
case NSOrderedDescending: NSLog(@"%@ is in past from %@", mile, now); break;
case NSOrderedSame: NSLog(@"%@ is the same as %@", mile, now); break;
default: NSLog(@"erorr dates %@, %@", mile, now); break;
}
[mile release];
여기 친구. 이 기능은 귀하의 날짜를 특정 날짜와 일치시키고 일치하는지 여부를 알 수 있습니다. 요구 사항에 맞게 구성 요소를 수정할 수도 있습니다.
- (BOOL)isSameDay:(NSDate*)date1 otherDay:(NSDate*)date2 {
NSCalendar* calendar = [NSCalendar currentCalendar];
unsigned unitFlags = NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit;
NSDateComponents* comp1 = [calendar components:unitFlags fromDate:date1];
NSDateComponents* comp2 = [calendar components:unitFlags fromDate:date2];
return [comp1 day] == [comp2 day] &&
[comp1 month] == [comp2 month] &&
[comp1 year] == [comp2 year];}
감사합니다, Naveed Butt
NSDate *today = [NSDate date]; // it will give you current date
NSDate *newDate = [NSDate dateWithString:@"xxxxxx"]; // your date
NSComparisonResult result;
//has three possible values: NSOrderedSame,NSOrderedDescending, NSOrderedAscending
result = [today compare:newDate]; // comparing two dates
if(result==NSOrderedAscending)
NSLog(@"today is less");
else if(result==NSOrderedDescending)
NSLog(@"newDate is less");
else
NSLog(@"Both dates are same");
NSDate 개체를 비교하는 데 사용할 수있는 다른 방법이 있습니다. 각 방법은 특정 작업에서 더 효율적입니다. 비교 방법은 대부분의 기본적인 날짜 비교 요구 사항을 처리하기 때문에 선택했습니다.
이 카테고리는 NSDates를 비교하는 깔끔한 방법을 제공합니다.
#import <Foundation/Foundation.h>
@interface NSDate (Compare)
-(BOOL) isLaterThanOrEqualTo:(NSDate*)date;
-(BOOL) isEarlierThanOrEqualTo:(NSDate*)date;
-(BOOL) isLaterThan:(NSDate*)date;
-(BOOL) isEarlierThan:(NSDate*)date;
//- (BOOL)isEqualToDate:(NSDate *)date; already part of the NSDate API
@end
그리고 구현 :
#import "NSDate+Compare.h"
@implementation NSDate (Compare)
-(BOOL) isLaterThanOrEqualTo:(NSDate*)date {
return !([self compare:date] == NSOrderedAscending);
}
-(BOOL) isEarlierThanOrEqualTo:(NSDate*)date {
return !([self compare:date] == NSOrderedDescending);
}
-(BOOL) isLaterThan:(NSDate*)date {
return ([self compare:date] == NSOrderedDescending);
}
-(BOOL) isEarlierThan:(NSDate*)date {
return ([self compare:date] == NSOrderedAscending);
}
@end
간편한 사용 :
if([aDateYouWantToCompare isEarlierThanOrEqualTo:[NSDate date]]) // [NSDate date] is now
{
// do your thing ...
}
두 날짜를 모두 만들면 의 방법을 NSDate
사용할 수 있습니다 .NSDate
compare:
NSComparisonResult result = [Date2 compare:Date1];
if(result==NSOrderedAscending)
NSLog(@"Date1 is in the future");
else if(result==NSOrderedDescending)
NSLog(@"Date1 is in the past");
else
NSLog(@"Both dates are the same");
여기 에서 문서를 볼 수 있습니다 .
이 방법으로 두 날짜를 비교할 수도 있습니다.
NSDate * dateOne = [NSDate date];
NSDate * dateTwo = [NSDate date];
if([dateOne compare:dateTwo] == NSOrderedAscending)
{
}
내가 찾은 가장 좋은 방법은 주어진 날짜와 오늘의 차이를 확인하는 것입니다.
NSCalendar* calendar = [NSCalendar currentCalendar];
NSDate* now = [NSDate date];
int differenceInDays =
[calendar ordinalityOfUnit:NSCalendarUnitDay inUnit:NSCalendarUnitEra forDate:date] -
[calendar ordinalityOfUnit:NSCalendarUnitDay inUnit:NSCalendarUnitEra forDate:now];
Apple의 날짜 및 시간 프로그래밍 가이드 [NSCalendar ordinalityOfUnit : NSDayCalendarUnit inUnit : NSEraCalendarUnit forDate : myDate] 의 Calendrical Calculations 목록 13에 따르면 시대가 시작된 이후의 자정 수를 제공합니다. 이렇게하면 날짜가 어제, 오늘 또는 내일인지 쉽게 확인할 수 있습니다.
switch (differenceInDays) {
case -1:
dayString = @"Yesterday";
break;
case 0:
dayString = @"Today";
break;
case 1:
dayString = @"Tomorrow";
break;
default: {
NSDateFormatter* dayFormatter = [[NSDateFormatter alloc] init];
[dayFormatter setLocale:usLocale];
[dayFormatter setDateFormat:@"dd MMM"];
dayString = [dayFormatter stringFromDate: date];
break;
}
}
NSDateFormatter *df= [[NSDateFormatter alloc] init];
[df setDateFormat:@"yyyy-MM-dd"];
NSDate *dt1 = [[NSDate alloc] init];
NSDate *dt2 = [[NSDate alloc] init];
dt1=[df dateFromString:@"2011-02-25"];
dt2=[df dateFromString:@"2011-03-25"];
NSComparisonResult result = [dt1 compare:dt2];
switch (result)
{
case NSOrderedAscending: NSLog(@"%@ is greater than %@", dt2, dt1); break;
case NSOrderedDescending: NSLog(@"%@ is less %@", dt2, dt1); break;
case NSOrderedSame: NSLog(@"%@ is equal to %@", dt2, dt1); break;
default: NSLog(@"erorr dates %@, %@", dt2, dt1); break;
}
코딩 즐기기 ......
코코아, 날짜의 사용을 비교하기 위해 isEqualToDate
, compare
, laterDate
, 및 earlierDate
방법에 대한 NSDate
객체, 당신이 필요로하는 날짜 인스턴스화.
문서 :
http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSDate_Class/Reference/Reference.html#//apple_ref/occ/instm/NSDate/isEqualToDate :
http://developer.apple. com / documentation / Cocoa / Reference / Foundation / Classes / NSDate_Class / Reference / Reference.html # // apple_ref / occ / instm / NSDate / earlierDate :
http://developer.apple.com/documentation/Cocoa/Reference/Foundation/ Classes / NSDate_Class / Reference / Reference.html # // apple_ref / occ / instm / NSDate / laterDate :
http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSDate_Class/Reference/Reference.html# // apple_ref / occ / instm / NSDate / compare :
정말로 필요한 것은 같은 종류의 두 개체를 비교하는 것입니다.
문자열 날짜 (@ "2009-05-11")에서 NSDate를 만듭니다.
http://blog.evandavey.com/2008/12/how-to-convert-a-string-to-nsdate.html현재 날짜도 문자열이면 NSDate로 만드십시오. 이미 NSDate이면 그대로 두십시오.
Pascal의 답변에 대한 Swift 변형은 다음과 같습니다.
extension NSDate {
func isLaterThanOrEqualTo(date:NSDate) -> Bool {
return !(self.compare(date) == NSComparisonResult.OrderedAscending)
}
func isEarlierThanOrEqualTo(date:NSDate) -> Bool {
return !(self.compare(date) == NSComparisonResult.OrderedDescending)
}
func isLaterThan(date:NSDate) -> Bool {
return (self.compare(date) == NSComparisonResult.OrderedDescending)
}
func isEarlierThan(date:NSDate) -> Bool {
return (self.compare(date) == NSComparisonResult.OrderedAscending)
}
}
다음과 같이 사용할 수 있습니다.
self.expireDate.isEarlierThanOrEqualTo(NSDate())
다른 사람이 찾고 있다면 Naveed Rafi 의 답변이 Swift로 변환 된 함수는 다음과 같습니다 .
func isSameDate(#date1: NSDate, date2: NSDate) -> Bool {
let calendar = NSCalendar()
let date1comp = calendar.components(.YearCalendarUnit | .MonthCalendarUnit | .DayCalendarUnit, fromDate: date1)
let date2comp = calendar.components(.YearCalendarUnit | .MonthCalendarUnit | .DayCalendarUnit, fromDate: date2)
return (date1comp.year == date2comp.year) && (date1comp.month == date2comp.month) && (date1comp.day == date2comp.day)
}
Get Today's Date:
NSDate* date = [NSDate date];
Create a Date From Scratch:
NSDateComponents* comps = [[NSDateComponents alloc]init];
comps.year = 2015;
comps.month = 12;
comps.day = 31;
NSCalendar* calendar = [NSCalendar currentCalendar];
NSDate* date = [calendar dateFromComponents:comps];
Add a day to a Date:
NSDate* date = [NSDate date];
NSDateComponents* comps = [[NSDateComponents alloc]init];
comps.day = 1;
NSCalendar* calendar = [NSCalendar currentCalendar];
NSDate* tomorrow = [calendar dateByAddingComponents:comps toDate:date options:nil];
Subtract a day from a Date:
NSDate* date = [NSDate date];
NSDateComponents* comps = [[NSDateComponents alloc]init];
comps.day = -1;
NSCalendar* calendar = [NSCalendar currentCalendar];
NSDate* yesterday = [calendar dateByAddingComponents:comps toDate:date options:nil];
Convert a Date to a String:
NSDate* date = [NSDate date];
NSDateFormatter* formatter = [[NSDateFormatter alloc]init];
formatter.dateFormat = @"MMMM dd, yyyy";
NSString* dateString = [formatter stringFromDate:date];
Convert a String to a Date:
NSDateFormatter* formatter = [[NSDateFormatter alloc]init];
formatter.dateFormat = @"MMMM dd, yyyy";
NSDate* date = [formatter dateFromString:@"August 02, 2014"];
Find how many days are in a month:
NSDate* date = [NSDate date];
NSCalendar* cal = [NSCalendar currentCalendar];
NSRange currentRange = [cal rangeOfUnit:NSDayCalendarUnit inUnit:NSMonthCalendarUnit forDate:date];
NSInteger numberOfDays = currentRange.length;
Calculate how much time something took:
NSDate* start = [NSDate date];
for(int i = 0; i < 1000000000; i++);
NSDate* end = [NSDate date];
NSTimeInterval duration = [end timeIntervalSinceDate:start];
Find the Day Of Week for a specific Date:
NSDate* date = [NSDate date];
NSCalendar* cal = [NSCalendar currentCalendar];
NSInteger dow = [cal ordinalityOfUnit:NSWeekdayCalendarUnit inUnit:NSWeekCalendarUnit forDate:date];
그런 다음 NSComparisonResult를 사용하여 날짜를 비교하십시오.
..
NSString *date = @"2009-05-11"
NSString *nowDate = [[[NSDate date]description]substringToIndex: 10];
if([date isEqualToString: nowDate])
{
// your code
}
참고 URL : https://stackoverflow.com/questions/949416/how-to-compare-two-dates-in-objective-c
'developer tip' 카테고리의 다른 글
UIView를 이미지로 변환하는 방법 (0) | 2020.11.09 |
---|---|
Python에서 두 개의 정렬 된 목록 결합 (0) | 2020.11.09 |
Python을 사용하여 Unix 또는 Linux에서 프로그램의 프로세스 ID를 얻는 방법은 무엇입니까? (0) | 2020.11.09 |
PHP로 임의의 16 진수 색상 코드 생성 (0) | 2020.11.09 |
Android Studio 설치 중 유효한 JVM 설치 오류를 가리 키지 않음 (0) | 2020.11.09 |