2013-08-19 43 views
-1

我想使用NSDateFormatter将以下字符串转换为NSDate:2013-08-19 7:00 AM将字符串转换为NSDate

但是,创建了以下NSDate:2013-08-19 04:00:00 +0000。时间不对。

我的代码如下。我不知道我做错了什么。

NSDateFormatter *dateFormatter = [NSDateFormatter new]; 
[dateFormatter setTimeZone:[NSTimeZone systemTimeZone]]; 
[dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm a"]; 
NSString *string = @"2013-08-19 7:00 AM"; 
NSDate *dateFromString = [dateFormatter dateFromString:string]; 
+0

也许问题是你没有指定一个时区。你在什么时区? – LuisCien

+0

@LuisCien我没有意识到这一点很重要。我想创建两个日期对象(例如上午7点和上午11点)并计算两次之间的秒数。 –

+0

我也有过这个“问题”。不是一个真正的问题,但你没有时区设置。 NSDate不包括时区。 – Jamie

回答

4

您试图在小时上使用24小时格式的AM/PM指示符,并且这样做不起作用。更改行:

[dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm a"]; 

这样:

[dateFormatter setDateFormat:@"yyyy-MM-dd hh:mm a"]; 

,你会发现你的代码现在的作品。

-2

您看到“+0000”的原因意味着操作系统正在将您的时间字符串转换为UTC。要解决这个问题,你只需要设置你的本地时区。

dateFormatter.timeZone = YOUR_LOCAL_TIMEZONE; 

此外,打印您的日期在您的本地设置,您可以使用NSDateFormatter的:

localizedStringFromDate:dateStyle:timeStyle: 

希望这有助于!

+0

是否正确:'[dateFormatter setTimeZone:[NSTimeZone systemTimeZone]];' –

+0

它仍然返回4点。 –

+0

@JackHumphries请看我更新的答案。干杯! – LuisCien