从NSString将日期时间转换为NSDate

时间:2012-11-14 11:18:07

标签: objective-c ios nsdate xcode4.5 nstimezone

时区总是给我带来麻烦。这次我必须将我在NSSTring中的日期时间转换为NSDate。

我正在做这样的事情。

NSString *myStringDate=@"14-11-2012 4:09:00 PM +0500"

NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setTimeZone:[NSTimeZone systemTimeZone]];
[formatter setDateFormat:@"dd-MM-yyyy h:mm:ss a Z"];

NSDate *aDate = [formatter dateFromString:myStringDate];
NSLog(@"%@",aDate);

但我有这样的输出

14-11-2012 11:09:00 +0000

此外,没有设置AM / PM: - (

我想要的是14-11-2012 4:09:00 PM +0500,即我在字符串中的日期时间相同。

感谢您的期待。

3 个答案:

答案 0 :(得分:1)

转换的输出是给出GMT时间

NSString *myStringDate=@"14-11-2012 4:09:00 PM +0500"

NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setTimeZone:[NSTimeZone systemTimeZone]];
[formatter setDateFormat:@"dd-MM-yyyy h:mm:ss a Z"];

NSDate *aDate = [formatter dateFromString:myStringDate];



 NSDateFormatter* df_utc = [[[NSDateFormatter alloc] init] autorelease];
 [df_utc setTimeZone:[NSTimeZone timeZoneWithName:@"UTC"]];
 [df_utc setDateFormat:@"yyyy.MM.dd G 'at' HH:mm:ss zzz"];

 NSDateFormatter* df_local = [[[NSDateFormatter alloc] init] autorelease];
 [df_local setTimeZone:[NSTimeZone timeZoneWithName:@"EST"]];
 [df_local setDateFormat:@"yyyy.MM.dd G 'at' HH:mm:ss zzz"];

 NSString* ts_utc_string = [df_utc stringFromDate:aDate];
 NSString* ts_local_string = [df_local stringFromDate:aDate];

答案 1 :(得分:0)

这是需要改变的。

[formatter setDateFormat:@"dd-MM-yyyy h:mm:ss a "];

由于

答案 2 :(得分:0)

转换看起来是正确的,但默认输出是UTC时间(+0000)和24小时时钟,这就是为什么你没有得到AM / PM的区别(“01:00 PM”将是13:00)。如果需要特定的表示形式([formatter stringFromDate:aDate]),还需要格式化输出 ...

对于UTC问题,您需要选择所选的时区,方法是选择[NSTimeZone systemTimeZone]。首先尝试[NSTimeZone localTimeZone]