我正在撰写一个涉及时区的应用。我想抓住用户的设备时间,让我们调用dateA
,并且我的目标日期始终位于EDT时区(dateB
)。
我想了解两个日期之间的区别并向用户显示,但是在dateB
的时区。
例如:
用户设备时间是太平洋夏令时上午07:30,dateB
是美国东部时间上午11:00
所以时间差是30分钟。
我的算法是:
1)获取用户设备时间
2)转换为EDT
3)抓住dateA
和dateB
我的问题是,在我获得用户的设备时间[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? 我做错了什么?
答案 0 :(得分:2)
NSDate
以时区中立的方式存储。 NSDateFormatter
使用-[NSDateFormatter setTimeZone:]实际格式化给定时区的NSDate
。如果你想要一个来自NSDateFormatter
的字符串,那么还有-[NSDate descriptionWithCalendarFormat:timeZone:locale:],但通常最好使用{{1}}。