Iphone Objective-C中计算相对时间的问题
我有以下数据:Iphone Objective-C中计算相对时间的问题,iphone,objective-c,cocoa-touch,nsdate,nsdateformatter,Iphone,Objective C,Cocoa Touch,Nsdate,Nsdateformatter,我有以下数据: ---- ORIGINAL TIME 2011-09-04 12:04:36 FORMATTED TIME 2011-09-04T12:04:36-0700 RELATIVE TIME: 2517s ago ---- ORIGINAL TIME 2011-09-04 11:40:17 FORMATTED TIME 2011-09-04T11:40:17-0700 RELATIVE TIME: 1058s ago ---- ORIGINAL TIME 2011-09-04
----
ORIGINAL TIME 2011-09-04 12:04:36
FORMATTED TIME 2011-09-04T12:04:36-0700
RELATIVE TIME: 2517s ago
----
ORIGINAL TIME 2011-09-04 11:40:17
FORMATTED TIME 2011-09-04T11:40:17-0700
RELATIVE TIME: 1058s ago
----
ORIGINAL TIME 2011-09-04 08:05:00
FORMATTED TIME 2011-09-04T08:05:00-0700
RELATIVE TIME: 3h ago
----
ORIGINAL TIME 2011-09-04 07:16:00
FORMATTED TIME 2011-09-04T07:16:00-0700
RELATIVE TIME: 4h ago
我有一些代码来计算相对时间(我正在传递格式化的时间):
为什么我在2517秒前得到了2517秒
,而它实际上不应该以秒的形式输出。它应该是410万年前
这种情况下的间隔是
-2517.0
我建议使用-(NSDateComponents*)组件:(NSUInteger)unitFlags fromDate:(NSDate*)startingDate toDate:(NSDate*)resultDate选项:(NSUInteger)选择NSCalendar
的方法来获取现在和日期之间的相对时间单位,使用类似这样的方法:
NSDate *dateToCompare = pointerToYourDatePulledFromTheStringRep;
NSInteger numberOfUnits;
NSString *unitString;
NSDateComponents *comps = [[NSCalendar currentCalendar]
components:(NSWeekCalendarUnit |
NSDayCalendarUnit |
NSHourCalendarUnit |
NSMinuteCalendarUnit |
NSSecondCalendarUnit)
fromDate:dateToCompare
toDate:[NSDate date]
options:0];
if ([comps week] > 0) {
numberOfUnits = [comps week];
unitString = @"week";
} else if ([comps day] > 0) {
numberOfUnits = [comps day];
unitString = @"day";
} else if... // hour, minute, second
result = [NSString stringWithFormat:@"%d %@%@",
numberOfUnits,
unitString,
(numberOfUnits != 1 ? @"s" : @"")];
// last bit deals with plurality
通过这种方式,操作系统函数可以处理所有复杂的日期计算,您可以获得精确性和多日历兼容性的好处
至于你的问题(技术上)为什么你的秒不是分钟,我猜seconds\u IN\u MIN
的定义不正确。但是,同样,使用NSCalendar
会给你一个更可靠的答案。顺便说一句——如果interval
是-2517.0
,你应该检查(interval<-60)
。如果所有时间都在过去,则所有宏都应定义为负数,比较应为
。考虑到这一点,我不确定你的时间是怎么安排的
您可能需要执行(fabs(interval)>秒(单位)
(并将其定义为正值)在你所有的比较中,如果你的时间是在未来还是过去。你如何定义SECONDS\u in_MIN
等?你自己做了什么来调试它?@omz#定义SECONDS\u in_MIN 60
我想你没有向我们展示什么。此外,如果你设置了一个断点并用调试器一步一步地调试,你应该能够在短时间内找到它。这不应该是你的另一个答案的补充,而不是单独的帖子吗?是的,本,如果你有补充,只需更新/编辑到你的原始答案中。啊。如果我把它分成两个不同的方向,我通常会把它分成两部分(一个“la”,现在是完全不同的东西)。但如果社区认为这是一个禁忌,我可以从这里开始做一个。
NSDate *dateToCompare = pointerToYourDatePulledFromTheStringRep;
NSInteger numberOfUnits;
NSString *unitString;
NSDateComponents *comps = [[NSCalendar currentCalendar]
components:(NSWeekCalendarUnit |
NSDayCalendarUnit |
NSHourCalendarUnit |
NSMinuteCalendarUnit |
NSSecondCalendarUnit)
fromDate:dateToCompare
toDate:[NSDate date]
options:0];
if ([comps week] > 0) {
numberOfUnits = [comps week];
unitString = @"week";
} else if ([comps day] > 0) {
numberOfUnits = [comps day];
unitString = @"day";
} else if... // hour, minute, second
result = [NSString stringWithFormat:@"%d %@%@",
numberOfUnits,
unitString,
(numberOfUnits != 1 ? @"s" : @"")];
// last bit deals with plurality