时区总是给我带来麻烦。这次我必须将我在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
,即我在字符串中的日期时间相同。
感谢您的期待。
答案 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]
。