Как получить NSDate из определенного часового пояса и выполнить расчеты на основе этой даты - PullRequest
0 голосов
/ 15 ноября 2010

Я пытался обернуть голову вокруг NSDate, NSCalendar, NSDateComponents, NSTimeZone и NSDateFormatter.

NSDate, NSTimeZone и NSDateFormatterдовольно просты.Другие классы не являются.

Я хочу получить текущее восточное время (фактическая дата / время в EST в момент запуска кода).

Затем я хочу продвинуть этодата ровно на один месяц, принимая во внимание летнюю экономию, которая может (или не может быть) в силе.

Насколько я понимаю, добавление 84600 - неправильный способ сделать это, но я могу ошибаться.1017 *

Может кто-нибудь выложить пример как это сделать?

1 Ответ

2 голосов
/ 15 ноября 2010

Это на самом деле довольно просто:

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 вы не делаете вычисления в определенном часовом поясе. Вы также не получаете «текущее восточное время». Вы просто получаете текущий момент времени (независимо от часового пояса) и делаете на нем свои расчеты. Фактическое преобразование в определенный часовой пояс происходит только на выходе (когда вы отображаете время для пользователя, обычно в его часовом поясе).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...