将日期转换为设备时区

时间:2013-01-21 18:25:22

标签: ios objective-c

我正在从服务器解析JSON,其中一个值是这样的日期: 2013-01-21 18:22:35 +00000

我的问题是如何将此日期转换为当地时间,例如 2013-01-21 12:22:35 -0600

我需要将日期转换为其他格式吗?

谢谢!

修改

使用@Gabriele Petronella解决方案:

NSString * yourJSONString = @"2013-01-21 18:22:35 +0000";

NSTimeZone* localTimeZone = [NSTimeZone localTimeZone];
NSString* localAbbreviation = [localTimeZone abbreviation];

NSDateFormatter * dateFormatter = [[NSDateFormatter alloc] init];
NSLocale *locale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"];
[dateFormatter setLocale:locale];
[dateFormatter setDateFormat:@"yyyy-MM-dd H:mm:ss Z"];
NSDate *aDate = [dateFormatter dateFromString:yourJSONString];

NSTimeZone *timezone = [NSTimeZone timeZoneWithName:localAbbreviation];
[dateFormatter setTimeZone:timezone];

NSLog(@"%@", [dateFormatter stringFromDate:aDate]);

一切正常!

2 个答案:

答案 0 :(得分:1)

您使用NSDateFormatterNSString读取日期,然后您可以使用其他(可能相同的)NSDateFormatter显示更改时区的日期。

NSString * yourJSONString = @"2013-01-21 18:22:35 +0000";
NSDateFormatter * dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setTimeStyle:NSDateFormatterFullStyle
 ];
[dateFormatter setDateStyle:NSDateFormatterFullStyle];    
NSDate * aDate = [dateFormatter dateFromString:yourJSONString];

NSTimeZone * timezone = [NSTimeZone timeZoneWithName:@"America/Chicago"];
[dateFormatter setTimeZone:timezone];

NSLog(@"%@", [dateFormatter stringFromDate:aDate);

请注意,时区只是显示的问题,而NSDate对象只是表示日期的抽象,它与显示无关。

答案 1 :(得分:0)

NSDateFormatter *dateFormatter=[[NSDateFormatter alloc] init]; [dateFormatter setDateFormat:@"yyyy-MM-dd hh:mm:ss"]; 
NSTimeZone *timeZone = [NSTimeZone localTimeZone]; [dateFormatter setTimeZone:timeZone];

NSString *myCurrentDeviceDate = [dateFormatter stringFromDate:[NSDate date]];