如何获取并转换回用户的生日 to/from 一个 NSTimeInterval?

How to get and convert back user's birthdate to/from a NSTimeInterval?

假设,我的生日是 (mon/day/year) 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 这样的网站上检查它时,它给了我错误的日期。

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 ,每次调用该方法时它都可能会更改,因为它是相对于当前时间的。如果您想要与该网站兼容的 date/time 间隔。使用:

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

您可以从上面的代码 (-1188000000) 复制 timeInterval 并将其粘贴到网站上,它会给您一个正确的日期。

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

这已经成功了!

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

感谢@sikhapol