n.e*_*ind 240 iphone cocoa-touch objective-c nsdate
我正在尝试实现dropBox同步,需要比较两个文件的日期.一个在我的dropBox帐户上,一个在我的iPhone上.
我想出了以下内容,但我得到了意想不到的结果.我想在比较这两个日期时我做了一些根本错误的事情.我只是使用了> <运算符,但我想这并不好,因为我正在比较两个NSDate字符串.开始了:
NSLog(@"dB...lastModified: %@", dbObject.lastModifiedDate);
NSLog(@"iP...lastModified: %@", [self getDateOfLocalFile:@"NoteBook.txt"]);
if ([dbObject lastModifiedDate] < [self getDateOfLocalFile:@"NoteBook.txt"]) {
NSLog(@"...db is more up-to-date. Download in progress...");
[self DBdownload:@"NoteBook.txt"];
NSLog(@"Download complete.");
} else {
NSLog(@"...iP is more up-to-date. Upload in progress...");
[self DBupload:@"NoteBook.txt"];
NSLog(@"Upload complete.");
}
Run Code Online (Sandbox Code Playgroud)
这给了我以下(随机和错误)输出:
2011-05-11 14:20:54.413 NotePage[6918:207] dB...lastModified: 2011-05-11 13:18:25 +0000
2011-05-11 14:20:54.414 NotePage[6918:207] iP...lastModified: 2011-05-11 13:20:48 +0000
2011-05-11 14:20:54.415 NotePage[6918:207] ...db is more up-to-date.
Run Code Online (Sandbox Code Playgroud)
或者这个恰好是正确的:
2011-05-11 14:20:25.097 NotePage[6903:207] dB...lastModified: 2011-05-11 13:18:25 +0000
2011-05-11 14:20:25.098 NotePage[6903:207] iP...lastModified: 2011-05-11 13:19:45 +0000
2011-05-11 14:20:25.099 NotePage[6903:207] ...iP is more up-to-date.
Run Code Online (Sandbox Code Playgroud)
Nic*_*ver 651
我们假设两个日期:
NSDate *date1;
NSDate *date2;
Run Code Online (Sandbox Code Playgroud)
然后以下比较将告诉哪个是早/晚/相同:
if ([date1 compare:date2] == NSOrderedDescending) {
NSLog(@"date1 is later than date2");
} else if ([date1 compare:date2] == NSOrderedAscending) {
NSLog(@"date1 is earlier than date2");
} else {
NSLog(@"dates are the same");
}
Run Code Online (Sandbox Code Playgroud)
有关更多详细信息,请参阅NSDate类文档.
So *_* It 49
在派对之后,另一种比较NSDate对象的简单方法是将它们转换为原始类型,以便于使用'>'''''=='等
例如.
if ([dateA timeIntervalSinceReferenceDate] > [dateB timeIntervalSinceReferenceDate]) {
//do stuff
}
Run Code Online (Sandbox Code Playgroud)
timeIntervalSinceReferenceDate将日期转换为自参考日期(2001年1月1日,GMT)以来的秒数.当timeIntervalSinceReferenceDate返回NSTimeInterval(这是一个double typedef)时,我们可以使用原始比较器.
And*_*rew 14
在Swift中,您可以重载现有的运算符:
func > (lhs: NSDate, rhs: NSDate) -> Bool {
return lhs.timeIntervalSinceReferenceDate > rhs.timeIntervalSinceReferenceDate
}
func < (lhs: NSDate, rhs: NSDate) -> Bool {
return lhs.timeIntervalSinceReferenceDate < rhs.timeIntervalSinceReferenceDate
}
Run Code Online (Sandbox Code Playgroud)
然后,你可以直接比较NSDates <,>和==(已经支持).
Gar*_*ary 13
NSDate 有比较功能.
compare:返回一个NSComparisonResult值,指示接收方的时间顺序和另一个给定日期.
(NSComparisonResult)compare:(NSDate *)anotherDate
Run Code Online (Sandbox Code Playgroud)
参数:anotherDate
比较接收器的日期.该值不得为零.如果值为nil,则行为未定义,并且可能在将来的Mac OS X版本中更改.
返回值:
NSOrderedSameNSOrderedDescendingNSOrderedAscending.Dan*_*n F 12
您想使用NSDate compare:,laterDate:,earlyDate:或isEqualToDate:methods.在这种情况下使用<和>运算符是比较指针,而不是日期
小智 11
- (NSDate *)earlierDate:(NSDate *)anotherDate
Run Code Online (Sandbox Code Playgroud)
这将返回接收器和anotherDate的早期版本.如果两者相同,则返回接收器.
一些日期工具,包括比较IN ENGLISH,这很好:
#import <Foundation/Foundation.h>
@interface NSDate (Util)
-(BOOL) isLaterThanOrEqualTo:(NSDate*)date;
-(BOOL) isEarlierThanOrEqualTo:(NSDate*)date;
-(BOOL) isLaterThan:(NSDate*)date;
-(BOOL) isEarlierThan:(NSDate*)date;
- (NSDate*) dateByAddingDays:(int)days;
@end
Run Code Online (Sandbox Code Playgroud)
实施:
#import "NSDate+Util.h"
@implementation NSDate (Util)
-(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);
}
- (NSDate *) dateByAddingDays:(int)days {
NSDate *retVal;
NSDateComponents *components = [[NSDateComponents alloc] init];
[components setDay:days];
NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
retVal = [gregorian dateByAddingComponents:components toDate:self options:0];
return retVal;
}
@end
Run Code Online (Sandbox Code Playgroud)
你应该使用:
- (NSComparisonResult)compare:(NSDate *)anotherDate
Run Code Online (Sandbox Code Playgroud)
比较日期.目标C中没有运算符重载.
你们为什么不使用这些NSDate比较方法:
- (NSDate *)earlierDate:(NSDate *)anotherDate;
- (NSDate *)laterDate:(NSDate *)anotherDate;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
142307 次 |
| 最近记录: |