无法将NSString转换为NSDate

时间:2012-06-21 03:20:48

标签: objective-c nsdate nsdateformatter

我查看了其他示例,但仍无法将此字符串转换为日期。运行此代码后,我从NSLogs获得以下输出:

预测转换:2012-07-01 00:00:00 +0000

时间戳转换:2012-06-24 00:00:00 +0000

预测:604800.000000

这不是我使用的硬编码日期。有谁知道为什么?代码如下:

NSString *timeStamp = @"20120620 19:23";//[[predictionData objectAtIndex:0 ] valueForKey:@"tmstmp"];
    NSString *predictionTime = @"20120620 19:30";// [[predictionData objectAtIndex:0 ] valueForKey:@"prdtm"];


    NSDateFormatter *ts = [[NSDateFormatter alloc] init];
    [ts setDateFormat:@"yyyyMMdd HH:dd"];
    NSDate *convertedTS = [ts dateFromString:timeStamp];

    NSDateFormatter *pt = [[NSDateFormatter alloc] init];
    [pt setDateFormat:@"yyyyMMdd HH:dd"];
    NSDate *convertedPT = [pt dateFromString:predictionTime];

    NSTimeInterval timeDifference = [convertedPT timeIntervalSinceDate:convertedTS];



    NSLog(@"Prediction Conversion: %@", [convertedPT description]);
    NSLog(@"Timestamp Conversion: %@", [convertedTS description]);

    NSLog(@"Prediction: %f", timeDifference);

谢谢!

3 个答案:

答案 0 :(得分:1)

你使用dd代替mm而不是mm。这样:

[ts setDateFormat:@"yyyyMMdd HH:dd"];

应该是这样的:

[ts setDateFormat:@"yyyyMMdd HH:mm"];

答案 1 :(得分:1)

格式化程序字符串不正确。

HH:dd

应该是

HH:mm

此外,您还需要考虑时区。如果未指定+XXXX,则默认使用UTC。设置时区:

[ts setTimeZone:[NSTimeZone /*timezone*/]];

其中/*timezone*/NSTimeZone类指定。使用时区(以及许多不同的时区)有许多不同的方式,因此请选择最适合您的方式。

答案 2 :(得分:0)

您需要设置区域设置,将其设置为en_us_POSIX

ts.locale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_us_POSIX"];

也应该是HH:mm,而不是dd