2012-05-29 75 views
-1

我有一个格式为Tue May 22 2012 11.00 pm的字符串。现在我需要将其转换为NSDate,然后获取当前日期和时间格式NSDate *currentDate = [NSDate today];计算两次之间的时间差 - 逻辑问题

然后找到2

我无法来解决这个之间的Seconds的时间差,请帮助我

+1

如果是本地时间,你不能比较两个的NSDate您的NSDate。例如,在我们将时钟设置回一个小时的那一天,有些时候会重复两次。至少,您还需要知道指定的时间是白天时间还是标准时间。 –

回答

2

我有一个格式为Tue May 22 2012 11.00 pm的字符串。现在,我需要将其转换成NSDate的

好这部分,你需要一个`NSDateFormatter``

NSDateFormatter *df = [[NSDateFormatter alloc] init]; 
[df setDateFormat:@"EEE MM dd yyyy hh.mm a"]; 
NSDate *dateFromString =[df dateFromString:yourString]; 

这是第一部分。

现在的

然后找到2

NSTimeIntervall diffInSeconds = [dateFromString timeIntervalSinceNow]; 

这间以秒为单位的时间差将计算dateFromString和现在之间的秒数。

有关日期和时间在可可工作,我非常奥莱电子书籍的Begemenans "Working with Date and Time in Cocoa Series"

+0

我试过这个'NSDate * dateFromString = [df dateFromString:@“Mon May 21 2012 11.00 pm”];'但是我得到的输出是'Mon 12 26 2011 11.00 PM'。显示不正确的日期。 –

+0

NSDateFormatter * df = [[NSDateFormatter alloc] init]; [df setDateFormat:@“EEE MM dd YYYY hh.mm a”]; df.timeZone = [NSTimeZone timeZoneForSecondsFromGMT:0]; NSDate * dateFromString = [df dateFromString:@“Mon May 2012 2012 11.00 pm”]; NSTimeInterval diffInSeconds = [dateFromString timeIntervalSinceNow]; NSLog(@“%@”,[df stringFromDate:dateFromString]); 我的代码 –

+0

'2011-12-26 23:00:00 +0000 '我得到了2011年的日期。但是我在字符串中输入的是2012年的日期 –

1

都转换为time_t(可能与mktime),然后减去。理论上你应该使用difftime来计算差异,但实际上大多数典型系统(几乎可以肯定包括MacOS)的time_t自一个纪元(POSIX的1970年1月1日午夜)之后是整数秒,所以减法工作正常。

当然,夏令时有一些皱纹,其中一些会产生无法解决的歧义。

+1

一般的答案是:如果可能的话,意识到你已经把自己涂在了一个角落,并改变了设计,以便你一开始就没有这个问题。 –

+0

@DavidSchwartz:是的,一般。正如我确信你已经知道的那样,至少对于当地的大多数人来说,确实没有办法得到一个可以保证正确的答案,所以这样的答案一样好。 –

1

-dateFromString:方法NSDateFormatter类应该帮助更多资料。

然后-timeIntervalSinceNowNSDate给出了时间间隔。您不需要中间步骤[NSDate today]

2

使用NSDateFormatter将字符串日期为2012年5月22日下午11点00分至NSDate。您还需要在nsdateformatter中设置字符串日期的时区。

例子:

NSDateFormatter * frmt; 
    frmt = [[NSDateFormatter alloc] init]; 
    frmt.dateFormat = @"yyyy-MM-dd HH:mm:ss"; 
    frmt.timeZone = [NSTimeZone timeZoneForSecondsFromGMT:0]; 

您将需要使用对应于您的字符串的日期格式。

然后你得到使用

[frmt dateFromString:(NSString *)dateString] 

那么你可以使用-timeIntervalSinceDate