NSDateFormatter在下午4:15:00无法使用

时间:2012-05-30 16:41:45

标签: objective-c nsdate nsdateformatter

如何将“4:15:00 PM”转换为NSDate?以下是我的代码:

NSDateFormatter *df = [[NSDateFormatter alloc] init];
[df setDateFormat:@"HH:mm:ss aa"];
NSDate *date =  [df dateFromString:@"4:15:00 PM"];

NSLog(@"date: %@",date);//outputs: 1970-01-01 17:15:00 +0000
//should output: 1970-01-01 16:15:00 +0000

更新:我根据回复进行了更新,但仍然显示错误的显示:

NSLog(@"date: %@",[df stringFromDate:date]);//outputs: 12:15:00 PM
//should output: 4:15:00 PM

问题是为什么时间从下午4:15:00到下午12:15:00变化。

2 个答案:

答案 0 :(得分:5)

实际上,这是正确的。

但是,调试器和NSLog 显示 GMT中的时间。

如果您想显示当地时间,请使用NSDateFormatterstringFromDate

<强>更新
您的日期格式化程序格式也设置不正确。

应该是:[df setDateFormat:@"hh:mm:ss aa"];,因为你使用12小时制。

答案 1 :(得分:2)

这是因为你的语言环境。

NSDateFormatter输出一个NSDate - 它总是在GMT时间内。

如果您希望将初始字符串解释为GMT时间,则需要包含时区。

NSDateFormatter *df = [[NSDateFormatter alloc] init];
[df setDateFormat:@"HH:mm:ss aa z"];
NSDate *date =  [df dateFromString:@"4:15:00 PM GMT"];