如何获取和转换用户的生日到/从NSTimeInterval?

时间:2015-09-04 12:26:58

标签: ios nsdate nstimeinterval

假设,我的生日是(周一/日/年)10-05-1932(作为NSDate),如何将其转换为NSTimeInterval

再次,如何将NSTimeInterval转换回NSDate

我尝试使用NSDate的不同方法但尚未成功。

我在做什么?

NSString *strdate = @"10-05-1932";
NSDateFormatter *df = [[NSDateFormatter alloc] init];
[df setDateFormat:@"MM-dd-yyyy"];
NSDate *date = [df dateFromString:strdate];
NSLog(@"%.f", -[date timeIntervalSinceNow]);

这会记录2616605071(截至2015年9月4日16:21) - 当我使用this这样的网站查看时,它给了我错误的日期。

2 个答案:

答案 0 :(得分:2)

NSTimeInterval timeInterval = date.timeIntervalSinceReferenceDate;
NSDate *anotherDate = [NSDate dateWithTimeIntervalSinceReferenceDate: timeInterval];

尝试以下代码。 dateanotherDate将完全相同。

NSCalendar *calendar = [NSCalendar currentCalendar];
calendar.timeZone = [NSTimeZone timeZoneForSecondsFromGMT:0];
NSDateComponents *components = [[NSDateComponents alloc] init];
[components setDay:10];
[components setMonth:5];
[components setYear:1934];
NSDate *date = [calendar dateFromComponents:components];
NSLog(@"%@", date);
NSTimeInterval timeInterval = [date timeIntervalSinceReferenceDate];
NSDate *anotherDate = [NSDate dateWithTimeIntervalSinceReferenceDate:timeInterval];
NSLog(@"%@", anotherDate);

更新:

它不正确,因为您从该网站获得使用UNIX时间戳的时间戳(时间间隔)。此外,它不正确,因为您使用timeIntervalSinceNow,这可能会在您每次调用方法时发生变化,因为它相对于当前时间。如果您想要与该网站兼容的日期/时间间隔。使用:

NSTimeInterval timeInterval = date.timeIntervalSince1970;
NSDate *anotherDate = [NSDate dateWithTimeIntervalSince1970:timeInterval];

您可以复制上面代码中的timeInterval(-1188000000)并将其粘贴到网站上,它会为您提供正确的日期。

在内部,NSDate存储相对于参考日期的时间间隔(2001年1月1日)。您提到的网站是相对于1970年1月1日的UNIX时间戳。

答案 1 :(得分:0)

这只是工作!

SetWindowActivationScope( window, kWindowActivationScopeIndependent );

感谢@sikhapol