来自NSDateFormatter的错误时间

时间:2011-03-29 00:00:45

标签: iphone objective-c parsing date nsdateformatter

我有一个字符串,我想解析时间:

NSString *longdate = @"Mar 27, 2011 8:38:38 PM";

我想解析这个日期并输出时间部分w /小时+分钟+上午/下午:

// First, convert our string into an NSDate
NSDateFormatter *inFormat = [[NSDateFormatter alloc] init];
[inFormat setDateFormat:@"MMM dd, yyyy HH:mm:ss aaa"];
NSDate *date = [inFormat dateFromString:longdate];
[inFormat release];

// Now convert from date back to a string
NSDateFormatter *outFormat = [[NSDateFormatter alloc] init];
[outFormat setDateFormat:@"HH:mm aaa"];
NSString *final = [outFormat stringFromDate:date];
[outFormat release];

NSLog(@"original: %@ | final %@", longdate, final);

问题是最后时间是错误的。我希望时间是晚上8:38,但我得到的是下午12:38。

我只是希望得到我所说的相同的小时,而不是打扰任何时区或区域。我在这做错了什么?感谢。

4 个答案:

答案 0 :(得分:6)

发现问题。与时区无关,与使用日期格式化程序的错误格式代码有关。

[inFormat setDateFormat:@"MMM dd, yyyy HH:mm:ss aaa"];

应该是:

[inFormat setDateFormat:@"MMM dd, yyyy h:mm:ss aaa"];

同样,outFormat的dateformat应为:

[outFormat setDateFormat:@"h:mm aaa"];

在进行此调整后,即使没有任何TimeZone调整,一切正常。

答案 1 :(得分:1)

正如戴夫所说,检查你的时区。您也可以告诉日期格式化程序使用当前时区:

[outFormat setTimeZone:[NSTimeZone localTimeZone]];

答案 2 :(得分:0)

你的时区搞砸了。 IIRC,NSDateFormatter(默认情况下)将解析UTC时区(+000)中的内容,但当前时区中的日期为NSLog。或类似的东西。

无论如何,检查你的时区。

答案 3 :(得分:-1)

NSString *longdate = @"2013-04-29 10:20 PM";

// First, convert our string into an NSDate
NSDateFormatter *inFormat = [[NSDateFormatter alloc] init];
[inFormat setTimeZone:[NSTimeZone localTimeZone]];
[inFormat setDateFormat:@"yyyy-MM-dd hh:mm aa"];
NSDate *date = [inFormat dateFromString:longdate];

// Now convert from date back to a string
NSDateFormatter *outTimeFormat = [[NSDateFormatter alloc] init];
[outTimeFormat setDateFormat:@"hh:mm aaa"];
NSString *finalTime = [outTimeFormat stringFromDate:date];


NSDateFormatter *outDateFormat = [[NSDateFormatter alloc] init];
[outDateFormat setDateFormat:@"yyyy-MM-dd"];
NSString *finalDate = [outDateFormat stringFromDate:date];

NSLog(@"Date:%@ and Time :%@",finalDate,finalTime);