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

时间:2010-03-23 20:34:42

标签: iphone date formatting timezone nsdate

我知道如何使用NSTimeZone来获取另一个时区中当前时间的偏移量。 NSDate总是相对于GMT返回,那么如何使用正确的时区信息派生字符串?也就是说,我把当前的时间(在美国东部时间)拿走,并使用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];

abbreviationname最终都会返回GMT-0800,而不是像我期望的那样返回PST。如果我愿意的话,我甚至无法做到。我做错了什么?

1 个答案:

答案 0 :(得分:12)

  

NSDate始终相对于GMT返回

这没有意义。 NSDate只是封装了一个绝对的时刻(让我们忘记一秒钟的相对论),它没有任何时区概念。说NSDate时间与GMT相关是错误的。

要输出特定时区的日期,您应创建NSDateFormatter的实例并在其上调用setTimeZone:以设置时区。根据{{​​3}},格式字符串@"zzz"应将时区值输出为“PST”。