2012-08-02 155 views
0

我正在通过Objective-C编程中的一项挑战,大书呆子牧场指南,而且我受到挑战中的一个困惑。如何计算Objective-C中两个日期之间的差异?

使用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对象首先是必需的,为什么我们必须创建日期组件来提供对象。

这对我来说都是新鲜事物,过去我一直使用动态语言。所以一个像“假人”一样的解释会很棒!

+0

[减去2个的NSDate对象]的可能重复(http://stackoverflow.com/questions/6306661/subtracting-two-nsdate-objects) – 2012-08-02 17:04:29

+0

@JamesBlack:这看起来像是重复的差异位,但不是最初的“什么是日历”位。 – 2012-08-02 17:08:52

回答

3

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

我不是Objective-C程序员,但我知道一些关于日期/时间的API。

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

日历 - 初始化为公历 - 采用这些日期组件,并且能够及时给你回NSDate,这是一种“绝对”价值。

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

编辑:事实上,timeIntervalSinceNow函数可能是你想要的,一旦你有你的出生日期。

+0

谢谢!我明白。在过去,我经历了所有这些麻烦似乎很奇怪,我使用了一个带有三个参数的简单函数:现在,然后和间隔类型! – Mohamad 2012-08-02 17:10:35

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 ]; 
相关问题