NSDataFormatter dateFromString导致输出不正确

时间:2013-02-26 10:32:58

标签: iphone objective-c nsdateformatter

这是我的代码:

[dateFormat setDateFormat:@"EEE MM d HH:mm:ss yyyy"];
logDate = [dateFormat dateFromString:[line substringToIndex:24]];    

行由字符串组成:"Mon Feb 18 09:25:53 2013: FAILED : Configuration-Update :

我单独获取日期“Mon Feb 18 09:25:53 2013”​​并使用@"EEE MM d HH:mm:ss yyyy"格式对其进行格式化。 输出错误:"2013-02-18 03:55:53 -0000"单独打印时间不正确。我跟着Date Format Patterns来指定模式,但我仍在逐步解决这个问题。我无法理解它出错的地方..如果有人发现问题会有所帮助。 提前谢谢

5 个答案:

答案 0 :(得分:1)

试试这个

NSDate *date = [NSDate date];
NSDateFormatter * formatter = [[NSDateFormatter alloc]init];
[formatter setDateFormat:@"EEE MM d hh:mm:ss yyyy"];
NSLog(@"%@",[formatter stringFromDate:date]);
NSLog(@"%@",date);

当您使用NSLog进行日志记录时,您将获得UTC格式(UTC由偏移值组成,在印度,其标准时间为+5.30),即yyyy-MM-d HH:mm:ss z,z是添加或减去的偏移量根据当地时间或当前时间。

例如

NSLog(@"%@",[formatter stringFromDate:date]);
NSLog(@"%@",date);

星期二02 26 05:38:00 2013 // “EEE MM d hh:mm:ss yyyy

星期二02 26 17:46:22 2013 // “EEE MM d HH:mm:ss yyyy”

2013-02-26 12:08:00 +0000 //只使用NSLog进行日志记录

希望这有助于你

答案 1 :(得分:0)

当您打印结果日期时,您需要为NSDateFormatter设置时区:

[formatter setTimeZone:[NSTimeZone localTimeZone]];

答案 2 :(得分:0)

您需要使用as:

NSString *line=@"Mon Feb 18 09:25:53 2013: FAILED : Configuration-Update :";

NSDateFormatter *dateFormat=[NSDateFormatter new];
[dateFormat setDateFormat:@"EEE' 'MM' 'd' 'HH:mm:ss' 'yyyy"];

NSDate *logDate = [dateFormat dateFromString:[line substringToIndex:24]];

NSLog(@"logDate->%@",logDate);

答案 3 :(得分:0)

如果我们获取NSdate对象的日志,该对象将仅显示与时区相关的日期+0000。为此我们需要将日期格式化为我们当地的时区。喜欢这个..

[dateFormat setDateFormat:@"EEE MM d HH:mm:ss yyyy"];
logDate = [dateFormat dateFromString:@"Mon Feb 18 09:25:53 2013"];
[dateFormat setTimeZone:[NSTimeZone localTimeZone]];
NSLog(@"Date %@",[dateFormat stringFromDate:logDate]);

答案 4 :(得分:0)

感谢所有..通过这种方式改变代码它起作用..

NSDateFormatter *dateFormat = [[[NSDateFormatter alloc] init]autorelease];
[dateFormat setDateFormat:@"EEE MM d HH:mm:ss yyyy"];    
[dateFormat setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"UTC"]];    
return [dateFormat dateFromString:dateString];