正确地将 NSString 转换为 NSDate

Correctly turn an NSString into NSDate

这似乎是一个很受欢迎的问题,但我还没有找到适用于我的情况的答案。

考虑我的代码行:

 classHour.StartPoint = [NSDate dateWithTimeIntervalSince1970:[[thisEvent valueForKey:@"Start"] doubleValue]]; 

classHour.StartPoint 是一个 NSDate。

thisEvent valueForKey:@"Start" 是一个 NSString 值 @"2016-01-13T07:30:00.0000000Z"

但不知何故,classHour.StartPoint 得到的值为 '1970-01-01 00:33:36 UTC'

我的问题有两个: 为什么会发生这种情况,并且 - 更正后 - 我确实会得到一个有效的 NSDate 吗?

这不起作用的原因是因为您正试图从字符串中获取双精度值。 我的情况是字符串是 2016-01-13T07:30:00.0000000Z,它不是双精度值,因此值 return 是 2016.

2016 是 return 因为 - 不是有效的双精度数,解析将在此处停止。但是 dateWithTimeIntervalSince1970: 创建的日期是正确的,因为自 1-1-1970 00:00:00.

以来是 2016 秒

您需要使用 NSDateFormater 从字符串中获取正确的日期值。

NSDateFormatter *dateFormatter= [NSDateFormatter new];
dateFormatter.dateFormat = @"yyyy'-'mm'-'dd'T'HH:mm:ss.AZ";

NSString *dateString =[thisEvent valueForKey:@"Start"];
NSDate *date = [dateFormatter dateFromString:test];