如何比较两个 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.");
}
这给了我以下(随机且错误的)输出:
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.
或者这个输出恰好是正确的:
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.
I am trying to achieve a dropBox sync and need to compare the dates of two files. One is on my dropBox account and one is on my iPhone.
I came up with the following, but I get unexpected results. I guess I'm doing something fundamentally wrong when comparing the two dates. I simply used the > < operators, but I guess this is no good as I am comparing two NSDate strings. Here we go:
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.");
}
This gave me the following (random & wrong) output:
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.
or this one which happens to be correct:
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.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(13)
让我们假设两个日期:
然后以下比较将告诉哪个日期早/晚/相同:
请参阅 NSDate 类文档 了解更多详细信息。
Let's assume two dates:
Then the following comparison will tell which is earlier/later/same:
Please refer to the NSDate class documentation for more details.
晚了,但比较 NSDate 对象的另一种简单方法是将它们转换为原始类型,这样可以轻松使用“>” '<' '==' 等
例如。
timeIntervalSinceReferenceDate
将日期转换为自参考日期(2001 年 1 月 1 日,GMT)以来的秒数。由于 timeIntervalSinceReferenceDate 返回 NSTimeInterval (这是一个 double typedef),我们可以使用原始比较器。Late to the party, but another easy way of comparing NSDate objects is to convert them into primitive types which allows for easy use of '>' '<' '==' etc
eg.
timeIntervalSinceReferenceDate
converts the date into seconds since the reference date (1 January 2001, GMT). AstimeIntervalSinceReferenceDate
returns a NSTimeInterval (which is a double typedef), we can use primitive comparators.在 Swift 中,您可以重载现有运算符:
然后,您可以直接将 NSDates 与
<
、>
和==
进行比较(已经支持)。In Swift, you can overload existing operators:
Then, you can compare NSDates directly with
<
,>
, and==
(already supported).NSDate
有一个比较函数。compare:
返回一个NSComparisonResult
值,该值指示接收者和另一个给定日期的时间顺序。参数:
另一个日期
与接收器进行比较的日期。
该值不能为零。如果值为 nil,则行为未定义,并且可能会在 Mac OS X 的未来版本中更改。
返回值:
NSOrderedSame
NSDate
has a compare function.compare:
Returns anNSComparisonResult
value that indicates the temporal ordering of the receiver and another given date.Parameters:
anotherDate
The date with which to compare the receiver.
This value must not be nil. If the value is nil, the behavior is undefined and may change in future versions of Mac OS X.
Return Value:
NSOrderedSame
NSOrderedDescending
NSOrderedAscending
.您想要使用 NSDate Compare:、laterDate:、earlyDate: 或 isEqualToDate: 方法。使用 <和>在这种情况下,运算符正在比较指针,而不是日期
You want to use the NSDate compare:, laterDate:, earlierDate:, or isEqualToDate: methods. Using the < and > operators in this situation is comparing the pointers, not the dates
这将返回接收者和 anotherDate 中较早的一个。如果两者相同,则返回接收者。
This returns the earlier of the receiver and anotherDate. If both are same, the receiver is returned.
一些日期实用程序,包括英语比较,这很好:
实现:
Some date utilities, including comparisons IN ENGLISH, which is nice:
The implementation:
您应该使用 :
来比较日期。 Objective C 中没有运算符重载。
You should use :
to compare dates. There is no operator overloading in objective C.
为什么你们不使用这些
NSDate
比较方法:Why don't you guys use these
NSDate
compare methods:我遇到了几乎相同的情况,但就我而言,我正在检查天数差异
当您需要以天/月/年为单位比较 NSDate 时有用
I have encounter almost same situation, but in my case I'm checking if number of days difference
Useful when you need to compare NSDate in Days/Month/Year unit
您也可以通过此方法比较两个日期
You can compare two date by this method also
使用这个简单的函数进行日期比较
Use this simple function for date comparison
我已经尝试过希望它对你有用
I have tried it hope it works for you