NSDate更改时区

时间:2013-08-08 11:19:56

标签: ios timezone nsdate

我正在撰写一个涉及时区的应用。我想抓住用户的设备时间,让我们调用dateA,并且我的目标日期始终位于EDT时区(dateB)。

我想了解两个日期之间的区别并向用户显示,但是在dateB的时区。

例如:
用户设备时间是太平洋夏令时上午07:30,dateB是美国东部时间上午11:00 所以时间差是30分钟。

我的算法是:
1)获取用户设备时间
2)转换为EDT
3)抓住dateAdateB

之间的时差

我的问题是,在我获得用户的设备时间[NSDate date]后,通过时区EDT查看DateFormatter。时间不会改变。

EDIT ::

    NSDate *localDate = [NSDate date]; //this will have 7:30AM PDT
    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
    dateFormatter.dateFormat = @"yyyy-MM-dd HH:mm:ss";
    [dateFormatter setTimeZone:[NSTimeZone timeZoneWithName:@"EDT"]];
    NSString *convertedTimeString = [dateFormatter stringFromDate:localDate];

为什么convertTimeString在EDT中不包含10:30 AM? 我做错了什么?

1 个答案:

答案 0 :(得分:2)

NSDate以时区中立的方式存储。 NSDateFormatter使用-[NSDateFormatter setTimeZone:]实际格式化给定时区的NSDate。如果你想要一个来自NSDateFormatter的字符串,那么还有-[NSDate descriptionWithCalendarFormat:timeZone:locale:],但通常最好使用{{1}}。