NSDateComponents : 查找超过 30 天
Posted
技术标签:
【中文标题】NSDateComponents : 查找超过 30 天【英文标题】:NSDateComponents : Find older than 30 days 【发布时间】:2015-06-29 09:12:48 【问题描述】:使用NSDateComponents
我想比较出发日期和现在,看看出发日期是否> 30天。
我使用NSDateComponents
功能,但在调试它时,当我预计它是 3 天、15 天或其他任何时间时,它总是像一个非常大的数字。
NSDate* now = [NSDate date];
NSUInteger unitFlags = NSDayCalendarUnit;
NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
NSDateComponents *components = [calendar components:unitFlags fromDate:departureDate toDate:now options:0];
NSInteger age = [components day]+1;
当我尝试记录年龄时
NSLog(@"age (in days) = %lu", (long) age);
它返回一个很长的数字,例如18446744073709551613
我想做一个 if 语句:
if (age > 30)
但当返回的年龄是这样的长数字时,我不确定如何执行此操作。
非常感谢
【问题讨论】:
你登录departureDate
和now
了吗?我认为[components day]
也应该是负数,因为我猜departureDate
晚于now
。所以你的测试> 30
不应该正确触发。
NSLog(@"age")
记录age
,而不是名为age
的变量的内容。请向我们展示真实的日志记录代码。
你是对的,NSLog 年龄不记录年龄。我更新了问题
【参考方案1】:
NSDate * dateNotFormatted = [NSDate date];
double now = [dateNotFormatted timeIntervalSince1970];
NSLog(@"%f",now);
NSDateFormatter * dateFormatter = [[NSDateFormatter alloc]init];
[dateFormatter setDateFormat:@"dd-MM-yyyy"];
NSDate * dateDepareture =[dateFormatter dateFromString:@"29-06-2015"];
double dateDept = [dateDepareture timeIntervalSince1970];
NSLog(@"%f",dateDept);
检查 30 天的双值...
或
NSDateComponents *components;
NSInteger days;
components = [[NSCalendar currentCalendar] components:NSCalendarUnitDay fromDate:[NSDate date] toDate:[dateFormatter dateFromString:@"2-07-2015"] options:0];
days = [components day];
NSLog(@"%ld",(long)days);
将代码更改为您需要检查 30 天...
NSDayCalendarUnit NS_CALENDAR_ENUM_DEPRECATED(10_4, 10_10, 2_0, 8_0, "改用 NSCalendarUnitDay") = NSCalendarUnitDay
【讨论】:
我是否需要添加days = ([components day] + 1);
我对正好是 30 天前的时间戳进行了测试,结果是 29 天而不是 30 天【参考方案2】:
NSDate* date30 = [NSDate date];
date30 = [date dateByAddingInterval:86400*30];
if([departureDate compare:date30] == NSOrderedDescending)
//Departure > Today + 30d
else
//Departure < Today + 30d
这是你需要的吗?
【讨论】:
以上是关于NSDateComponents : 查找超过 30 天的主要内容,如果未能解决你的问题,请参考以下文章
iOS 3.1 上的 NSDateComponents setTimeZone NSInvalidArgumentException
如何在两个 NSDateComponents 之间获取 NSDateComponents?