2012-06-21 34 views
0

我看过其他例子,但我仍然无法将此字符串转换为日期。之后,我运行此代码我从NSLogs以下的输出:将NSString转换为NSDate时遇到困难

预测变换: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); 

谢谢!

回答

1

您使用dd代替mm的分钟数。这:

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

应该是这样的:

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

与固定格式仍然获得日子和时辰错误从字符串。我没有得到预测转换:2012-06-21 00:30:00 +0000时间戳转换:2012-06-21 00:23:00 +0000 –

1

您格式化字符串不正确。

HH:dd 

应该

HH:mm 

此外,你需要采取的时区考虑在内。如果未指定+XXXX,则默认情况下使用UTC。要设置时区:

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

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

+0

与那个固定我仍然得到: –

+0

预测转换:2012-06 -21 00:30:00 +0000 时间戳转换:2012-06-21 00:23:00 +0000 –

+0

@JeffW我编辑了我的答案,以使时区生效。 –

0

您需要设置语言环境,将其设置为en_us_POSIX

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

也应该HH:mm,不dd

+0

与固定的格式化程序仍然从字符串中获取错误的日期和时间。我没有得到预测转换:2012-06-21 00:30:00 +0000时间戳转换:2012-06-21 00:23:00 +0000 –