如何从特定时区获取NSDate并根据该日期执行计算

时间:2010-11-15 15:12:29

标签: iphone objective-c ipad

我一直在尝试围绕NSDateNSCalendarNSDateComponentsNSTimeZoneNSDateFormatter

NSDateNSTimeZoneNSDateFormatter非常简单明了。其他类不是。

我想获取当前的东部时间(实际的日期/时间是在代码运行时的EST中)。

然后我想将该日期提前一个月,考虑到可能(或可能不是)有效的夏令时。

根据我的理解,添加84600是不正确的方法,但我可能是错的。

有人可以发一个如何做到这一点的例子吗?

1 个答案:

答案 0 :(得分:2)

实际上非常简单:

NSDate *now = [NSDate date];

NSDateComponents *oneMonth = [[[NSDateComponents alloc] init] autorelease];
[oneMonth setMonth:1];
NSCalendar *calendar = [NSCalendar currentCalendar];
NSDate *oneMonthFromNow = [calendar dateByAddingComponents:oneMonth toDate:now options:0];

NSDateFormatter *df = [[[NSDateFormatter alloc] init] autorelease];
[df setTimeZone:[NSTimeZone timeZoneWithName:@"America/New_York"]];
[df setDateStyle:NSDateFormatterMediumStyle];
[df setTimeStyle:NSDateFormatterMediumStyle];

NSLog(@"Now in New York: %@", [df stringFromDate:now]);
NSLog(@"One month from now in New York: %@", [df stringFromDate:oneMonthFromNow]);

编辑:那就是说,你的问题有点令人困惑。使用NSDate,您不会在特定时区进行计算。你也没有得到“当前的东部时间”。您只需获取当前时间点(无论时区如何)并对其进行计算。实际转换到特定时区只发生在输出中(当您向用户显示时间时,通常是在他们的时区)。