iphone - NSDate以不同时区表示,即本地时区(GMT-400)到PST

标签 iphone date formatting timezone nsdate

我知道如何使用 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/

相关文章:

javascript - 按日期返回 mm-dd-yyyy 的 Angular 过滤器

visual-studio-code - vs 代码更漂亮 - 在 Angular 中的 @Input() 装饰器之后添加新行

Outlook 中的 HTML 电子邮件格式错误

iPhone Facebook Graph API 库

iphone - 在手机之间发送 NSDictionary

iphone - 以最快的方式获取 facebook 好友头像 - iOS

ios - XCode 图像尺寸@3

javascript - 计算 JavaScript 中两个日期之间的差异时的时区问题

r - 将日期转换为 POSIXct

java - 如何使用指数表示法将 double 转换为 n 字符的字符串?