我知道如何使用 NSTimeZone 导出当前时间在另一个时区的偏移量。 NSDate 总是相对于 GMT 返回,那么如何导出具有正确时区信息的字符串?即,我采用当前所在的时间(EST)并使用 NSTimeZone 最终减去表示 PST 时间所需的 3 小时。但我所做的只是从仍然相对于我的时区表示的时间中减去 3 小时。如何让 NSDateFormatter 使用目标时区输出时间?
我尝试过的一个策略是:
NSCalendar *cal = [NSCalendar currentCalendar];
NSDate *now = [NSDate date];
NSTimeZone *tz = [NSTimeZone timeZoneForSecondsFromGMT:(-8 * 3600)]; // for PST
NSDateComponents *dc = [cal components: NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit | NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit fromDate:now];
[cal setTimeZone:tz];
NSDate *newDate = [cal dateFromComponents:dc];
没有爱。我可以采用单独的日期组件并组成一个字符串,但它无法本地化。
相关问题:
NSTimeZone *tz = [NSTimeZone timeZoneForSecondsFromGMT:(-8 * 3600)]; // for PST
NSString *abbreviation = [tz abbreviation];
NSString *name = [tz name];
缩写
和名称
最终都返回GMT-0800
,而不是我期望的PST。所以如果我愿意的话,我什至无法做到以上这些。我做错了什么?
最佳答案
NSDate always returns relative to GMT
这没有道理。 NSDate 只是封装了一个绝对时间点(让我们暂时忘记相对论),并且它没有任何时区的概念。说 NSDate 时间相对于 GMT 是错误的。
要输出特定时区的日期,您应该创建一个 NSDateFormatter
实例并对其调用 setTimeZone:
来设置时区。根据Unicode docs ,格式字符串 @"zzz"
应将时区值输出为“PST”。
关于iphone - NSDate以不同时区表示,即本地时区(GMT-400)到PST,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2503397/