0

我正在通过 Objective-C 编程中的一个挑战,The Big Nerd Ranch Guide,我对其中一个挑战感到有些困惑。

使用 NSDate 的两个实例来计算你已经活了多少秒。提示:这是您如何根据年、月等创建新日期对象的方法:

所以我需要以秒为单位计算现在和我的出生日期之间的差异。听起来不错。然后提示出现:

@autoreleasepool {
    NSDateComponents *comps = [[NSDateComponents alloc] init];
    [comps setYear:1981];
    [comps setMonth:7];
    [comps setDay:12];
    [comps setHour:1];
    [comps setMinute:55];
    [comps setSecond:33];

    NSCalendar *g = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];

    NSDate *dateOfBirth = [g dateFromComponents:comps];

第一个问题是我不明白这*g是什么意思。我知道它是一个指向 NSCalendar 对象的指针。但我们为什么需要它?代表什么g

然后示例代码使用该g变量来获取日期。在另一种语言中,这就像DateDiff(dateOne, dateTwo, interval). 我不清楚为什么首先需要 Calendar 对象,以及为什么我们必须创建日期组件来提供对象。

这对我来说是全新的,我过去曾使用过动态语言。所以像“傻瓜”这样的解释会很棒!

4

2 回答 2

3

然后示例代码使用 g 变量来获取日期。在另一种语言中,这就像 DateDiff(dateOne, dateTwo, interval) 一样简单。我不清楚为什么首先需要 Calendar 对象,以及为什么我们必须创建日期组件来提供对象。

我不是 Objective-C 程序员,但我对日期/时间 API 有所了解。

为了指定您的出生日期/时间,您将给出 1981 年、7 月等。1981 年是什么意思?对你来说,这可能意味着大约 31 年前……但对于使用不同日历系统的人来说,它可能意味着完全不同的东西。从“年/月/日等”转换为“时间点”有点像从字符串转换为整数:“10”是指十还是十六?这一切都取决于您的参考框架(在这种情况下是基础 - 日期案例中的日历系统)。

日历 - 初始化为公历 - 采用这些日期组件,并能够及时为您返回一个NSDate“绝对”值。

至于计算两个NSDate值之间的差异 - 我怀疑有一个成员可以为您提供“自 Unix 纪元以来的秒数”(或可能的毫秒数)。因此,从两个日期(您的出生日期和“现在”)中取一个,然后从另一个日期中减去一个,您将得到两者之间经过的秒数(或毫秒)。

编辑:事实上,timeIntervalSinceNow一旦你有了你的出生日期,这个功能可能就是你想要的。

于 2012-08-02T17:03:50.430 回答
3

你可以这样做

NSDateComponents *comps = [[NSDateComponents alloc] init];
[comps setYear:1981];
[comps setMonth:7];
[comps setDay:12];
[comps setHour:1];
[comps setMinute:55];
[comps setSecond:33];

NSDate *dateOfBirth = [[NSCalendar currentCalendar] dateFromComponents:comps];


NSTimeInterval timeGap=[[NSDate new] timeIntervalSinceDate:dateOfBirth ];
于 2012-08-03T04:37:24.620 回答